属性或索引器'string.this [int]'不能分配给 - 它是只读的

时间:2014-02-28 11:31:22

标签: c# string

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

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

两者都被宣布:

String x;
String backx;

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

9 个答案:

答案 0 :(得分:16)

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

相反,您必须使用更改来构建新字符串。有几种方法可以做到这一点,但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

答案 1 :(得分:2)

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

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

string x = "abcd";
string backx = new string(x.Reverse().ToArray()); 

Console.WriteLine(backx);    // output: "dcba"

答案 2 :(得分:1)

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

答案 3 :(得分:1)

字符串在C#中是不可变的。您可以在此处详细了解:http://msdn.microsoft.com/en-us/library/362314fe.aspx

答案 4 :(得分:0)

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

由于您正在尝试撤消字符串,请查看this帖子。它有很多信息。

答案 5 :(得分:0)

createSomething

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

答案 6 :(得分:0)

下面的代码只是交换字符串中每个字符的索引,这使得您只需要在原始字符串的一半处迭代,如果您处理大量字符,这非常有效。结果是原始字符串反转。我用一个由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);
    }

答案 7 :(得分:0)

字符串是不可变的。您已经转换为Char Array,然后可以进行修改。 或者,您可以使用StringBuilder。

例如

char[] wordArray = word.ToCharArray();

答案 8 :(得分:0)

如果您需要更换,例如字符串中的索引 2 使用这个(它很丑,但可以工作并且易于维护)

V1 - 你知道你想放什么。这里你用伪代码说 string[2] = 'R';

row3String.Replace(row3String[2], 'R');

V2 - 你需要把他们的字符 R 或字符 Y。这里 string[2] = 'R' if is 'Y' or if not stay 'Y' (this一行if需要某种形式的else)

row3String.Replace(row3String[2], row3String[2].Equals('Y') ? 'R' : 'Y');