У меня есть список массивов, и мне нужно проверить, существуют ли массивы в списке. Как это:странное поведение Contains() в списке массивов
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
Так что мой вопрос: почему это происходит? Массивы и кортежи являются ссылочным типом, не должны ли они иметь аналогичное сравнение сравнений? Если я хочу использовать массивы, как я могу сделать «содержащий», который работает в моей ситуации?
http://referencesource.microsoft.com/#mscorlib/system/tuple.cs,169 – SLaks