有两个重载Equals
on StringBuilder
which 可以做一些意想不到的事情。
重载继承自Equals(Object)
Object 并比较引用。
Equals(StringBuilder)
重载比较content 、Capacity 和 MaxCapacity。
您似乎正在调用这两个重载中的第二个。
由于 StringBuilder 将动态扩展其容量,比较两个 StringBuilder 实例的结果取决于对每个实例执行的操作(例如追加、替换、删除等)的确切顺序。
例如,这给出了您描述的结果:
StringBuilder sb1 = new StringBuilder(), sb2 = new StringBuilder();
sb1.Append("something").Append('1', 100).Replace("1", "");
sb2.Append("something");
Console.WriteLine(sb1.Equals(sb2)); // False
Console.WriteLine(sb1.ToString().Equals(sb2.ToString())); // True
似乎没有仅比较内容的内置方法,但如果您不想在比较时分配字符串,则可以轻松编写自己的比较:
public static bool Equals(StrinBuilder left, StringBuilder right)
{
if (left.Length != right.Length)
return false;
int length = left.Length;
for(int i = 0; i < length; i++)
if (left[i] != right[i])
return false;
return true;
}