一種の文字列ラッパー クラスを作成し、そのインスタンスを通常の文字列と交換可能な辞書キーとして使用したいと考えています。私はオーバーライドGetHashCode
してEquals
、奇妙に思える結果を得ました。問題を切り分けました。私のコードを見て、2 回目の検索で null が返される理由を説明してください。
void Main()
{
var foo = new StringWrapper("foo");
var h = new Hashtable {{ foo, "bar" }};
Console.WriteLine(h["foo"]);
Console.WriteLine(h[foo]); // null ??
}
public class StringWrapper
{
readonly string wrapped;
public StringWrapper(string s) {
wrapped = s;
}
public override bool Equals(object obj) {
return wrapped.Equals(obj);
}
public override int GetHashCode() {
return wrapped.GetHashCode();
}
public override string ToString() {
return wrapped;
}
}