如何更改字符串的第n个元素

我在c#中有一个代码,如下所示

string s = new string('~',25); int ind = 5; s[ind] = 'A'; 

它给出了一个错误

属性或索引器’string.this [int]’无法分配 – 它被读取

那么问题是什么,我该如何解决呢?

字符串是不可变的 – 您无法更改现有字符串。

两种选择:

  • 使用StringBuilder ,例如

     StringBuilder builder = new StringBuilder(new string('~', 25)); builder[5] = 'A'; string result = builder.ToString(); 
  • 从char数组构建一个新字符串:

     char[] chars = new string('~', 25).ToCharArray(); chars[5] = 'A'; string result = new string(chars); 

在这两种情况下,如果需要,您可以填充可变数据而无需构建新的字符串 – 这将涉及更多代码,但可能更有效。

或者,您可以根据另一个答案获取子字符串并将它们连接在一起……基本上有很多方法可以解决这个问题。 哪一个适合取决于您的实际用例。

以下MSDN :

字符串是不可变的 – 创建对象后,字符串对象的内容无法更改,尽管语法使其看起来好像可以执行此操作。

看一下StringBuilder类或使用char数组。

C#字符串是不可变的,这意味着一旦构造就无法更改。 尝试使用一组字符代替。

尝试

 s = s.Substring(0, ind) + "A" + s.Substring(ind + 1); 

您可以使用Stringbuilder,您可以在其中分配索引器:

 StringBuilder sb = s; int ind = 5; sb[ind] = 'A'; s = sb.ToString();