为什么string[0]=“;新值“;不编译

本文关键字:新值 编译 string 为什么 | 更新日期: 2023-09-27 17:59:56

如何通过索引值为字符串设置新值?

我试过了:

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

strings无效,但对chars有效。为什么?

为什么string[0]=“;新值“;不编译

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);

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

替代品如下:

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");

使用字符串生成器也可以按照http://msdn.microsoft.com/en-us/library/362314fe.aspx

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

如果需要可变字符串,请使用StringBuilder。此外:[0]可以表示一个字符,而"a"是一个字符串对象,这是非法的。

字符的[0]是内存中可以赋值的地址。

另一方面,字符串是一个类,在这种情况下,a[0]实际上是对重载运算符[]的函数调用。不能为函数赋值。