如何在c#中的字符串中的索引处设置字符?

someString[someRandomIdx] = 'g'; 

这会给我一个错误,

我如何实现上述目标?

编辑:

是的它是’string’类型

如果它是string类型,那么你就不能这样做,因为字符串是不可变的 – 一旦设置它们就不能改变它们。

要实现您的需求,您可以使用StringBuilder

 StringBuilder someString = new StringBuilder("someString"); someString[4] = 'g'; 

更新

为什么使用string而不是StringBuilder ? 出于很多原因。 以下是我能想到的一些内容:

  • 访问字符串的值更快。
  • 字符串可以被实现(这并不总是发生),因此如果您创建一个具有相同值的字符串,则不会使用额外的内存。
  • 字符串是不可变的,因此它们在基于散列的集合中工作得更好,并且它们本质上是线程安全的。

C#字符串是不可变的。 您应该使用修改后的内容创建一个新字符串。

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

如果您绝对必须更改字符串的现有实例,则有一种使用不安全代码的方法:

  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#中修改字符串内容。 字符串是不可变的,因此必须先将它们转换为中间对象才能进行修改。

你也可以使用Insert()方法,例如somestring.Insert(index,data)

由于没有人提到单线解决方案:

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