为什么我的 .Equal 结果是 False 而我期望它是 True?

3
第一行是正确的,第二行是错误的。htmlOut和s2都是StringWriter对象。
    bool b = s2.ToString() == htmlOut.ToString();
    ret = htmlOut.Equals(s2); 

我期望的是true,而b确实是true,那么为什么ret是false?
4个回答

9

StringWriter 使用内部的 StringBuilder 进行写入操作。调用 StringWriter.ToString() 方法会返回由 StringBuilder 构建的字符串。

StringWriter 没有重写 object.Equals() 方法,因此 StringWriter.Equals() 方法只比较两个对象是否为同一引用,而不比较它们的字符串表示是否相等。


所以在使用 StringWriter 时,.Equals 和 == 是一样的吗? - user34537
StringWriter没有实现==运算符,它默认为引用相等性,所以是的。 - dtb

6

StringWriter没有重写object.Equals方法。

htmlOut.Equals(s2);

等同于:

object.ReferenceEquals(htmlOut, s2);

3
不完全正确。如果 htmlOutnull,则 htmlOut.Equals(s2); 将抛出 NullReferenceException,而 object.ReferenceEquals(htmlOut, s2); 则不会。 - dtb

2

Equals的默认实现支持引用类型的引用相等性和值类型的位相等性。htmlOut的类型是否有非默认的覆盖Equals方法?

在这种情况下,似乎没有,它告诉您它们是不同的实例,无论它们的语义值是否匹配。


1
htmlOut.ToString().Equals(s2.ToString());

这将返回 true


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接