我在c#中有一个代码,如下面的
string s = new string('~',25);
int ind = 5;
s[ind] = 'A';
它出错了
属性或索引器'string.this [int]'无法分配给 - 它被读取
那么问题是什么,我该如何解决呢?
答案 0 :(得分:11)
字符串是不可变的 - 您无法更改现有字符串。
两个选项:
使用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);
在这两种情况下,您可以填充可变数据,而无需根据需要构建新的字符串 - 这将涉及更多代码,但可能更有效。
或者,您可以根据另一个答案获取子字符串并将它们连接在一起......基本上有很多方法可以解决这个问题。哪一个适合取决于您的实际用例。
答案 1 :(得分:1)
答案 2 :(得分:0)
C#字符串是不可变的,这意味着一旦构造就无法更改。尝试使用一组字符代替。
答案 3 :(得分:0)
尝试
s = s.Substring(0, ind) + "A" + s.Substring(ind + 1);
答案 4 :(得分:0)
您可以使用Stringbuilder,您可以在其中分配索引器:
StringBuilder sb = s;
int ind = 5;
sb[ind] = 'A';
s = sb.ToString();