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

5

我有一个 C# 代码如下:

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

出现了错误。

属性或索引器“string.this[int]”不能被赋值,因为它是只读的。

那么问题出在哪里,如何解决呢?


1
字符串在C#中是不可变的,因此您需要使用StringBuilder。 - Tony The Lion
5个回答

11

字符串是不可变的,即你不能改变现有的字符串。

有两个选择:

  • 使用 StringBuilder,例如:

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

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

    如果你希望的话,在这两种情况下,你都可以在不先构建新字符串的情况下填充可变数据 - 这将涉及更多的代码,但可能会更有效。

    或者,你可以取子字符串并将它们串联在一起,就像另一个答案中所述...基本上有很多方式来解决这个问题。哪种方法适合取决于你实际的用例。


    1
    根据 MSDN

    字符串是不可变的 - 字符串对象的内容在对象创建后无法更改,尽管语法似乎可以这样做。

    查看 StringBuilder 类或使用 char 数组。


    0

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


    0

    尝试

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

    0
    你可以使用 StringBuilder,在其中可以分配给索引器:
    StringBuilder sb = s;
    int ind = 5;
    sb[ind] = 'A';
    s = sb.ToString();
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接