使用长字符串并发现此问题。有什么建议吗?
我有一个实例,其中字符串构建器的容量为1024,长度为992。
我是.Append()一个字符串,其.Length属性为1024。
调用.Append()之后,.ToString()方法返回一个长“\ 0 \ 0 \ 0”字符串。
发生了什么事? 0.o
如果我创建一个新的StringBuilder对象然后追加,我会得到我所期望的。所以字符串“应该”可以吗?
(我通过执行.Remove(0,LengthofSB)技巧清除字符串构建器。)
有什么想法吗?
答案 0 :(得分:3)
听起来像StringBuilder
中的原始数据是“\ 0 \ 0 \ 0 \ 0 \ 0 ...”而这就是你所看到的 - 如果你能看到结束的话你看到真实数据的字符串。
当各种Windows控件看到“\ 0”,因为它们将其视为字符串终止符时,会加剧这种情况。
如果你有一个简短但完整的程序来证明这个问题,我们可以证实我的怀疑。
答案 1 :(得分:0)
尽管我可以从我试过运行以下代码的问题中得出结论。没有上面提到的字符串“\ 0 \ 0 \ 0”,它工作正常。我已经发布了以下代码。请注意,因为你没有提供你的工作方式,我只是认为你正在尝试这样的事情。此外,我只是创建两个1024字符串,其中一个字符串充满'a'和其他'b',并在第一个stringbuilder对象中连接它们。它运作良好。
StringBuilder sb1 = new StringBuilder(1024);
for (int i = 0; i < 992; i++)
sb1.Append('a');
Console.WriteLine(sb1.ToString());
Console.WriteLine("{0}",sb1.Length);
StringBuilder sb2 = new StringBuilder();
for (int i = 0; i < 1024; i++)
sb2.Append('b');
Console.WriteLine(sb2.ToString());
Console.WriteLine("{0}",sb2.Length);
sb1.Append(sb2.ToString());
Console.WriteLine(sb1.ToString());
Console.WriteLine("{0}",sb1.Length);