为什么string[0]=“;新值“;不编译
本文关键字:新值 编译 string 为什么 | 更新日期: 2023-09-27 17:59:56
如何通过索引值为字符串设置新值?
我试过了:
string a = "abc";
a[0] = "A";
对strings
无效,但对chars
有效。为什么?
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]实际上是对重载运算符[]的函数调用。不能为函数赋值。