不能将属性或索引器“string.this[int]”分配给——它是只读的
Posted
技术标签:
【中文标题】不能将属性或索引器“string.this[int]”分配给——它是只读的【英文标题】:Property or indexer 'string.this[int]' cannot be assigned to -- it's read only 【发布时间】:2014-02-28 11:31:21 【问题描述】:我没有发现问题 - 我正在尝试做一个简单的操作:
for(i = x.Length-1, j = 0 ; i >= 0 ; i--, j++)
backx[j] = x[i];
两者都被声明:
String x;
String backx;
有什么问题?它说标题中的错误... 如果有问题 - 还有其他方法吗? 结果(正如名称 'backx' 所暗示的)是 backx 将包含字符串 X 向后。 附: x 不为空 - 它包含来自另一个字符串的子字符串。
【问题讨论】:
Edit characters in a String in C#的可能重复 【参考方案1】:字符串是不可变的:您可以在某个位置检索字符,但不能更改直接将字符更改为新字符。
相反,您必须使用更改构建一个新字符串。有几种方法可以做到这一点,但StringBuilder
的工作方式与您已有的类似:
StringBuilder sb = new StringBuilder(backx);
sb[j] = x[i];
backx = sb.ToString();
编辑:如果您查看string
面向公众的 API,您会看到这个索引器:
public char this[int index] get;
这表明您可以“获取”一个值,但由于没有可用的“设置”,因此您无法将值分配给该索引器。
EDITx2:如果您正在寻找一种反转字符串的方法,有几种不同的方法,但这里有一个示例说明它是如何工作的:http://www.dotnetperls.com/reverse-string
【讨论】:
【参考方案2】:String
在 .NET 中是不可变的 - 这就是您收到错误的原因。
你可以用 LINQ 得到一个反向字符串:
string x = "abcd";
string backx = new string(x.Reverse().ToArray());
Console.WriteLine(backx); // output: "dcba"
【讨论】:
【参考方案3】:字符串是不可变的。您已转换为 Char Array,然后您就可以进行修改。 或者你可以使用 StringBuilder。
例如
char[] wordArray = word.ToCharArray();
【讨论】:
【参考方案4】:在 C# 中,string
s 是不可变的。您不能将第 X 个字符“设置”为任何您想要的字符。如果您想构造一个新字符串,或者能够“编辑”一个字符串,请使用 StringBuilder 类。
【讨论】:
【参考方案5】:字符串在 C# 中是不可变的。你可以在这里阅读更多信息:http://msdn.microsoft.com/en-us/library/362314fe.aspx
【讨论】:
【参考方案6】:当您将它们视为数组时,您拥有的两个变量都是字符串(嗯,它们是)。当然,通过这种机制访问字符串中的字符是一个有效的语句,你不能真正这样分配它。
由于您正在尝试反转字符串,请查看this 帖子。它有很多信息。
【讨论】:
【参考方案7】: public static string ReverseName( string theName)
string revName = string.Empty;
foreach (char a in theName)
revName = a + revName;
return revName;
这个很简单,不直接涉及数组。
【讨论】:
【参考方案8】:下面的代码只是简单地交换字符串中每个字符的索引,这使您只需遍历原始字符串的一半,如果您要处理大量字符,这将非常有效。结果是将原始字符串反转。我用一个由 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);
【讨论】:
【参考方案9】:如果您需要更换,例如字符串中的索引 2 使用它(它很丑,但可以工作并且易于维护)
V1 - 你知道你想放什么。你在这里用伪代码说 string[2] = 'R';
row3String.Replace(row3String[2], 'R');
V2 - 你需要把他们的 char R 或 char Y 放在这里 string[2] = 'R' if is 'Y' or if was not stay 'Y' (一行 if 需要某种形式的 else)
row3String.Replace(row3String[2], row3String[2].Equals('Y') ? 'R' : 'Y');
【讨论】:
以上是关于不能将属性或索引器“string.this[int]”分配给——它是只读的的主要内容,如果未能解决你的问题,请参考以下文章
属性、索引器或动态成员访问不能作为 out 或 ref 参数传递[重复]