最初の行はtrue、2番目の行はfalseです。 htmlOutとs2はStringWriterオブジェクトです。私はそれが本当であると思うときに.Equal Falseはなぜですか?
bool b = s2.ToString() == htmlOut.ToString();
ret = htmlOut.Equals(s2);
私は、bがなぜ偽であるのかと期待していましたが、
最初の行はtrue、2番目の行はfalseです。 htmlOutとs2はStringWriterオブジェクトです。私はそれが本当であると思うときに.Equal Falseはなぜですか?
bool b = s2.ToString() == htmlOut.ToString();
ret = htmlOut.Equals(s2);
私は、bがなぜ偽であるのかと期待していましたが、
trueを返します。
htmlOut.Equals(s2);
は同等です:にStringWriter .Equalsとそう
object.ReferenceEquals(htmlOut, s2);
デフォルトのEqualsの実装では、参照型の参照の等価性と値型のビット単位の等価性をサポートしています。 htmlOutの型は、デフォルト以外のオーバーライドされたEqualsメソッドを持っていますか?
この場合、意味の値が一致するかどうかにかかわらず、異なるインスタンスであると思われます。
StringWriter
は内部にStringBuilder
を書き込みます。 StringWriter.ToString()
は、StringBuilder
によって構築された文字列を返します。
StringWriter
object.Equals()
を無効にしないため、StringWriter.Equals()
は、2つのオブジェクトが同じ参照であるかどうかを比較し、文字列表現が等しい場合は比較しません。
htmlOut.ToString().Equals(s2.ToString());
これはにStringWriterのはObject.equalsをオーバーライドしない
正確ではありません。 'htmlOut.Equals(s2);'は 'htmlOut'が' null'のときは 'NullReferenceException'をスローしますが、' object.ReferenceEquals(htmlOut、s2);はそうではありません。 – dtb