【发布时间】:2017-09-28 20:40:24
【问题描述】:
我在 C# 中有一个代码,如下所示
string s = new string('~',25);
int ind = 5;
s[ind] = 'A';
报错
无法将属性或索引器“string.this[int]”分配给 -- 已读取
那么问题是什么,我该如何解决。
【问题讨论】:
-
字符串在C#中是不可变的,所以需要使用stringBuilder
我在 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);
在这两种情况下,您都可以根据需要填充可变数据而无需构建新字符串开始 - 这将涉及更多代码,但可能会更有效。
或者,您可以使用子字符串并将它们连接在一起,根据另一个答案......基本上有很多方法可以解决这个问题。哪个合适取决于您的实际用例。
【讨论】:
【讨论】:
C# 字符串是不可变的,这意味着一旦构建就无法更改。尝试改用字符数组。
【讨论】:
试试
s = s.Substring(0, ind) + "A" + s.Substring(ind + 1);
【讨论】:
您可以使用Stringbuilder,您可以在其中分配给索引器:
StringBuilder sb = s;
int ind = 5;
sb[ind] = 'A';
s = sb.ToString();
【讨论】: