当我希望它是真的时,为什么.Equal False?

时间:2009-07-26 06:41:23

标签: c# .net

第一行是真的,第二行是假的。 htmlOut和s2是StringWriter对象。

    bool b = s2.ToString() == htmlOut.ToString();
    ret = htmlOut.Equals(s2); 

我期待的是哪个是b,但为什么会被视为假?

4 个答案:

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