我有一个 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[] chars = new string('~', 25).ToCharArray();
chars[5] = 'A';
string result = new string(chars);
如果你希望的话,在这两种情况下,你都可以在不先构建新字符串的情况下填充可变数据 - 这将涉及更多的代码,但可能会更有效。
或者,你可以取子字符串并将它们串联在一起,就像另一个答案中所述...基本上有很多方式来解决这个问题。哪种方法适合取决于你实际的用例。
C# 字符串是不可变的,这意味着一旦构建就无法更改。尝试使用字符数组代替。
尝试
s = s.Substring(0, ind) + "A" + s.Substring(ind + 1);
StringBuilder sb = s;
int ind = 5;
sb[ind] = 'A';
s = sb.ToString();