how do I set a character at an index in a string in c#?
If you absolutely must change the existing instance of a string, there is a way with unsafe code:
public static unsafe void ChangeCharInString(ref string str, char c, int index)
{
GCHandle handle;
try
{
handle = GCHandle.Alloc(str, GCHandleType.Pinned);
char* ptr = (char*)handle.AddrOfPinnedObject();
ptr[index] = c;
}
finally
{
try
{
handle.Free();
}
catch(InvalidOperationException)
{
}
}
}
C# strings are immutable. You should create a new string with the modified contents.
char[] charArr = someString.ToCharArray();
charArr[someRandomIdx] = 'g'; // freely modify the array
someString = new string(charArr); // create a new string with array contents.
If it is of type string
then you can't do that because strings are immutable - they cannot be changed once they are set.
To achieve what you desire, you can use a StringBuilder
StringBuilder someString = new StringBuilder("someString");
someString[4] = 'g';
Update
Why use a string
, instead of a StringBuilder
? For lots of reasons. Here are some I can think of:
- Accessing the value of a string is faster.
- strings can be interned (this doesn't always happen), so that if you create a string with the same value then no extra memory is used.
- strings are immutable, so they work better in hash based collections and they are inherently thread safe.
Since no one mentioned a one-liner solution:
someString = someString.Remove(index, 1).Insert(index, "g");