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");

Tags:

C#