【C#】Tuple.Equalsに関するメモ
以下のコードであれば、trueになる。
var foo = Tuple.Create("hoge", "piyo"); var bar = Tuple.Create("hoge", "piyo"); if (foo.Equals(bar)) { Console.WriteLine("true"); } else { Console.WriteLine("false"); }
内部的にEqualsが呼ばれていれば何でもいいので、こんなことも出来る。
var foo = new Dictionary<Tuple<string, string>, bool>(); foo.Add(Tuple.Create("hoge", "piyo"), true); var bar = Tuple.Create("hoge", "piyo"); bool foobar = false; if (foo.TryGetValue(bar, out foobar)) { Console.WriteLine(foobar ? "true" : "false"); } else { Console.WriteLine("false"); }
当然foo[bar]で取得することも出来る。Tupleから値を取り出すプロパティは死ぬほどダサいが、複数の値を何かのキーにするだけなら非常に使いやすいし、スマートに書ける。
ただし、構成要素まで見てくれるのはあくまでEqualsで比較した場合のみであり、等価演算子だとfalseが返される。
var foo = Tuple.Create("hoge", "piyo"); var bar = Tuple.Create("hoge", "piyo"); if (foo == bar) { Console.WriteLine("true"); } else { Console.WriteLine("false"); }