在C#中为字符串分配字符

时间:2015-10-12 08:18:50

标签: c#

public string simplifyString(string sInput)
{
        if (sInput.Length < 2)
        {
            return sInput;
        } 

        string sOutput;
        int iCount = 0;

        for (int i=1; i < sInput.Length; i++)
        {
            if (sInput[i] != sInput[iCount])
            {
                iCount++;
                sOutput[iCount] = sInput[i];
            }
        }
        return sOutput;
}

预编译器遇到上述C#代码的问题。

sOutput[iCount] = sInput[i];

此行有错误。它表示string.this [int]无法分配且只读。

3 个答案:

答案 0 :(得分:2)

.NET中的字符串是不可变的,一旦创建就无法更改。

如果你只需要替换字符(不是删除或添加),那么你可以简单地将它转换为数组,然后再转换回字符串:

var a = sOutput.ToCharArray();
// code that modifies a
var s = new string(a);

如果您还需要删除或添加,可以使用StringBuilder

var sb = new StringBuilder(sOutput);
// code that modifies sb
var s = sb.ToString();

答案 1 :(得分:0)

如果您将代码更改为如下所示,我认为您的问题将得到解决:

public string simplifyString(string sInput)
{
    if (sInput.Length < 2)
    {
        return sInput;
    } 

    string sOutput = sInput[0].ToString(); //Add initial for string
    int iCount = 0;

    for (int i=1; i < sInput.Length; i++)
    {
        if (sInput[i] != sInput[iCount])
        {
            iCount++;
            sOutput += sInput[i].ToString();//add new char as string to the end of the string
        }
    }
    return sOutput;
}

答案 2 :(得分:0)

这是一个崭露头角的c#程序员错误的领域! string在C#中是不可变的,即你不能在C#中修改字符串!

每次要编辑字符串的一部分时,您需要创建一个新的字符串对象并为其提供已编辑的值。但是如果你的程序有太多这样的操作,那么它会有明显的内存开销!在.net的垃圾收集器决定运行之前,所有这些内存都不会被释放! 如果你的字符串涉及很多编辑操作,请使用字符串构建器!