StringBuilder出错 - 字符串未被附加

时间:2009-12-30 05:33:50

标签: c# stringbuilder null-string

使用长字符串并发现此问题。有什么建议吗?

我有一个实例,其中字符串构建器的容量为1024,长度为992。

我是.Append()一个字符串,其.Length属性为1024。

调用.Append()之后,.ToString()方法返回一个长“\ 0 \ 0 \ 0”字符串。

发生了什么事? 0.o

如果我创建一个新的StringBuilder对象然后追加,我会得到我所期望的。所以字符串“应该”可以吗?

(我通过执行.Remove(0,LengthofSB)技巧清除字符串构建器。)

有什么想法吗?

2 个答案:

答案 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);