属性或索引器’string.this ‘不能分配给 – 它是只读的

我没有遇到问题 – 我试图做一个简单的动作:

for(i = x.Length-1, j = 0 ; i >= 0 ; i--, j++) { backx[j] = x[i]; } 

两者都宣布:

 String x; String backx; 

问题是什么 ? 它说标题中的错误……如果有问题 – 还有另一种方法吗? 结果(名称为’backx’提示)是backx将向后包含字符串X. PS x不为空 – 它包含来自另一个字符串的子字符串。

字符串是不可变的:您可以在特定位置检索字符,但不能直接将字符更改为新字符。

相反,您必须使用更改来构建新字符串。 有几种方法可以做到这一点,但StringBuilder以与您已有的方式类似的方式完成工作:

 StringBuilder sb = new StringBuilder(backx); sb[j] = x[i]; backx = sb.ToString(); 

编辑:如果你看看string公共面向API,你会看到这个索引器:

 public char this[int index] { get; } 

这表明您可以“获取”一个值,但由于没有“set”可用,因此您无法为该索引器指定值。

EDITx2:如果你正在寻找一种方法来反转一个字符串,有几种不同的方法,但这里有一个例子,解释它是如何工作的: http : //www.dotnetperls.com/reverse-string

String在.NET中是不可变的 – 这就是你得到错误的原因。

您可以使用LINQ获取反向字符串:

 string x = "abcd"; string backx = new string(x.Reverse().ToArray()); Console.WriteLine(backx); // output: "dcba" 

在C#中, string是不可变的。 你无法将第X个角色“设置”为你想要的任何东西。 如果您想要构造一个新字符串,或者能够“编辑”一个字符串,请使用ie StringBuilder类。

字符串在C#中是不可变的。 你可以在这里阅读更多相关信息: http : //msdn.microsoft.com/en-us/library/362314fe.aspx

您拥有的两个变量都是字符串,而您将它们视为数组(嗯,它们是)。 当然,通过这种机制访问字符串中的字符是一个有效的语句,你不能真正指定它。

由于您正在尝试反转字符串,请查看此post。 它有很多信息。

  public static string ReverseName( string theName) { string revName = string.Empty; foreach (char a in theName) { revName = a + revName; } return revName; } 

这很简单,不直接涉及数组。

下面的代码简单地交换了字符串中每个字符的索引,这使得您只需要在原始字符串中间进行迭代,如果您处理大量字符,这非常有效。 结果是原始字符串反转。 我用一个由100个字符组成的字符串对它进行了测试,并在0.0000021秒内执行。

 private string ReverseString(string testString) { int j = testString.Length - 1; char[] charArray = new char[testString.Length]; for (int i = 0; i <= j; i++) { if (i != j) { charArray[i] = testString[j]; charArray[j] = testString[i]; } j--; } return new string(charArray); } 

字符串是不可移植的。 您已转换为Char Array,然后您就可以修改。 或者您可以使用StringBuilder。

例如

 char[] wordArray = word.ToCharArray();