为什么字符串[0] ="新值"不编译?

时间:2011-06-22 23:42:21

标签: c# .net

我如何按索引值为字符串设置新值?

我试过了:

string a = "abc"; 
a[0] = "A"; 

不适用于strings,但适用于chars。为什么呢?

5 个答案:

答案 0 :(得分:14)

C#中的字符串(以及在基类库中使用System.String的其他.NET语言)是不可变的。也就是说,你不能用这种方式按字符修改字符串(或者就此而言,你是否可以修改字符串)。

如果要根据索引修改字符串,则必须先使用System.String.ToCharArray()将其转换为数组。您可以使用System.String的构造函数将其转换回字符串,并传入已修改的数组。

您的示例必须更改为:

string a = "abc";
char[] array = a.ToCharArray();
array[0] = 'A'; //Note single quotes, not double quotes
a = new string(array);

答案 1 :(得分:5)

System.String类型不允许通过索引(或通过任何方式)来更改String变量的内容,必须将其替换为对全新String的引用。 1}})。但是,The System.Text.StringBuilder类型允许按索引编写。可以创建一个新的System.Text.StringBuilder对象(可选地将字符串传递给构造函数),对其进行操作,然后使用其ToString方法将其转换回字符串。

答案 2 :(得分:3)

替换就是:

string a = "abc";
a = a.Remove(0, 1);
a = a.Insert(0, "A");

或者C说:

string a = "abc";
a = a.Remove(2, 1);
a = a.Insert(2, "C");

同样使用stringbuilder可以按照http://msdn.microsoft.com/en-us/library/362314fe.aspx

工作
 StringBuilder sb = new StringBuilder("abc");
 sb[0] = 'A';
 sb[2] = 'C';
 string str = sb.ToString();

答案 3 :(得分:2)

如果需要可变字符串,请使用StringBuilder。 另外:a [0]可以表示一个字符,而“A”是一个String对象 - 它是非法的。

答案 4 :(得分:1)

字符的[0]是内存中可以为其分配值的地址。

另一方面,

字符串是一个类,在这种情况下,a [0]实际上是对重载operator []的函数调用。您无法为函数指定值。