第一行是真的,第二行是假的。 htmlOut和s2是StringWriter对象。
bool b = s2.ToString() == htmlOut.ToString();
ret = htmlOut.Equals(s2);
我期待的是哪个是b,但为什么会被视为假?
答案 0 :(得分:9)
StringWriter
使用内部StringBuilder
来撰写。 StringWriter.ToString()
返回由StringBuilder
构建的字符串。
StringWriter
不会覆盖object.Equals()
,因此StringWriter.Equals()
会比较两个对象是否是相同的引用,而不是它们的字符串表示是否相等。
答案 1 :(得分:6)
StringWriter不会覆盖object.Equals。
htmlOut.Equals(s2);
相当于:
object.ReferenceEquals(htmlOut, s2);
答案 2 :(得分:2)
Equals的默认实现支持引用类型的引用相等性和值类型的按位相等性。 htmlOut的类型是否具有非默认重写的Equals方法?
在这种情况下,似乎没有,它告诉你它们是不同的实例,无论它们的语义值是否匹配。
答案 3 :(得分:1)
htmlOut.ToString().Equals(s2.ToString());
这将返回true