ものがたり(旧)

atsushieno.hatenablog.com に続く

僕はいまいち理解していないんでしょうけど、何でa.Equals(b)をb.Equals(a)にしただけで問題が消えて無くなったんでしょうねぇ。ランタイムのバグならMartinの言うとおりそれを直すのが正道だし、.NET 2.0で作ったコードがああしないと期待通りの振る舞いをしないというのなら、.NET 2.0の方が交換則をまともに実装できていなくておかしいのだから、やっぱり何かを直すべきものという印象はないですね(そう考えてないMS.NETキティもMLにはいるみたいだけど)。

追記:あ、コレの話です。

追記2:あ、しかも書いてあった…orz 確かにobjectとしての交換則が成立してないっぽい。で、問題はEquals()の引数ではなくて、何を使って比較するかという話なんじゃないかなあ。あ、だからMiguelのあーいう返事になるわけか。

追記3: Kazukiさんが解説してくれました。うん、これがBenと同じ理解ですね。

追記4:

追記多いなあ…。で、私見なんですけど、これは直しても良いんじゃないかなあと思います。「ユーザーの実装に問題があって、コードが期待通りに動作しない」という問題は、僕も経験したことがあります。ていうかMSのSgmlReaderなんですけどね。こいつはMoveTo*Attribute()のどっかにバグがあって、それ単体では表に出なかったんだけど、ReadNode()の実装の違いから、Mono上で動かしたときだけ表に出ちゃった、っていうもので、「こいつはユーザーの教育上直さない方が良いとも思うね」と釘を打ってから、MSコードと同じと思われる動作にしてcommitしました。