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]无法分配且只读。
答案 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的垃圾收集器决定运行之前,所有这些内存都不会被释放! 如果你的字符串涉及很多编辑操作,请使用字符串构建器!