配列のリストがあり、リストに配列が存在するかどうかを確認する必要があります。このような:
Guid guid1 = Guid.NewGuid();
Guid guid2 = Guid.NewGuid();
List<Guid[]> listOfArrays = new List<Guid[]>();
listOfArrays.Add(new[] { guid1, guid2});
if (listOfArrays.Contains(new[] { guid1, guid2 }))
Console.WriteLine(@"List of Array contains guid1 and guid2");
else
Console.WriteLine(@"List of Array does not contains guid1 and guid2");
Console.ReadKey();
出力は次のとおりです。
配列のリストにguid1とguid2が含まれていません
ただし、配列の代わりにタプルのリストを使用すると、すべてが期待どおりに機能します
Guid guid1 = Guid.NewGuid();
Guid guid2 = Guid.NewGuid();
List<Tuple<Guid, Guid>> listOfTuples = new List<Tuple<Guid, Guid>>();
listOfTuples.Add(new Tuple<Guid, Guid>(guid1, guid2));
if (listOfTuples.Contains(new Tuple<Guid, Guid>(guid1, guid2)))
Console.WriteLine(@"List of Tuple contains guid1 and guid2");
else
Console.WriteLine(@"List of Tuple does not contains guid1 and guid2");
Console.ReadKey();
出力は次のとおりです。
タプルのリストにはguid1とguid2が含まれています
だから私の質問は:なぜこれが起こるのですか?配列とタプルは参照型ですが、同様の等式比較を行うべきではありませんか?配列を使用したい場合、自分の状況で機能する「含む」を実行するにはどうすればよいですか?
配列は参照によって比較されるため、機能しません。
タプルは値で比較するためにオーバーライドEquals()
するため、機能します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加