Как установить символ с индексом в строке в С#?
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)