Как установить символ с индексом в строке в С#?

someString[someRandomIdx] = 'g';

что даст мне ошибку,

как достичь вышеуказанного?

Edit:

да, это тип 'string'

Ответы

Ответ 1

Если это тип string, вы не можете этого сделать, потому что строки неизменяемы - их нельзя изменить после их установки.

Чтобы достичь желаемого, вы можете использовать StringBuilder

StringBuilder someString = new StringBuilder("someString");

someString[4] = 'g';

Обновление

Зачем использовать string вместо StringBuilder? По многим причинам. Вот некоторые из них, о которых я могу думать:

  • Доступ к значению строки выполняется быстрее.
  • строки могут быть интернированы (это не всегда происходит), так что, если вы создаете строку с тем же значением, то дополнительная память не используется. Строки
  • неизменяемы, поэтому они лучше работают в коллекциях, основанных на хеше, и они по сути являются потокобезопасными.

Ответ 2

Строки С# неизменяемы. Вы должны создать новую строку с измененным содержимым.

 char[] charArr = someString.ToCharArray();
 charArr[someRandomIdx] = 'g'; // freely modify the array
 someString = new string(charArr); // create a new string with array contents.

Ответ 3

Поскольку никто не упомянул однострочное решение:

someString = someString.Remove(index, 1).Insert(index, "g");

Ответ 4

Если вам абсолютно необходимо изменить существующий экземпляр строки, существует способ с небезопасным кодом:

        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)
                {
                }
            }
        }

Ответ 5

Отметьте эту статью о том, как изменить содержимое строки на С#. Строки неизменяемы, поэтому их необходимо преобразовать в промежуточные объекты, прежде чем они могут быть изменены.

Ответ 6

Вы также можете использовать метод Insert() например, somestring.Insert(index,data)