【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");
}