Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数组列表中Contains()的奇怪行为_C#_Arrays - Fatal编程技术网

C# 数组列表中Contains()的奇怪行为

C# 数组列表中Contains()的奇怪行为,c#,arrays,C#,Arrays,我有一个数组列表,我需要验证列表中是否存在数组。像这样: 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 })) Consol

我有一个数组列表,我需要验证列表中是否存在数组。像这样:

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=Guid.NewGuid();
Guid guid2=Guid.NewGuid();
List listOfArrays=新列表();
添加(新[]{guid1,guid2});
if(listOfArrays.Contains(new[]{guid1,guid2}))
WriteLine(@“数组列表包含guid1和guid2”);
其他的
WriteLine(@“数组列表不包含guid1和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=Guid.NewGuid();
Guid guid2=Guid.NewGuid();
List listOfTuples=新列表();
Add(新元组(guid1,guid2));
if(listOfTuples.Contains(新元组(guid1,guid2)))
WriteLine(@“元组列表包含guid1和guid2”);
其他的
WriteLine(@“元组列表不包含guid1和guid2”);
Console.ReadKey();
输出为:

元组列表包含guid1和guid2


所以我的问题是:为什么会发生这种情况?数组和元组是引用类型,它们不应该有类似的相等比较吗?如果我想使用数组,我如何才能在我的情况下执行“包含”操作?

数组是通过引用进行比较的,因此它不起作用


元组按值进行比较,因此它很有效。

谢谢!但是,如果我想使用数组,有没有一种优雅的方法可以做到这一点?您可以制作自己的
EqualityComparer
并传递它。