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

3 .net c#

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

    bool b = s2.ToString() == htmlOut.ToString();
    ret = htmlOut.Equals(s2); 
Run Code Online (Sandbox Code Playgroud)

我期望真的是哪个b但是为什么是假的?

dtb*_*dtb 9

StringWriter使用内部StringBuilder写入.StringWriter.ToString()返回由其构建的字符串StringBuilder.

StringWriter不重写,object.Equals()所以StringWriter.Equals()比较两个对象是否是相同的引用,而不是它们的字符串表示是否相等.


CMS*_*CMS 6

StringWriter不会覆盖object.Equals.

htmlOut.Equals(s2);
Run Code Online (Sandbox Code Playgroud)

相当于:

object.ReferenceEquals(htmlOut, s2);
Run Code Online (Sandbox Code Playgroud)

  • 不完全是.`htmlOut.Equals(s2);`如果`htmlOut`是`null`,``将抛出`NullReferenceException`,而`object.ReferenceEquals(htmlOut,s2);`将不会. (3认同)