c#List.Contain(List)对于包含列表不返回true

时间:2013-09-10 08:40:17

标签: list c#-4.0 generics contains generic-list

我有一个父列表如下。

IList<List<int>> parentList = new List<List<int>>();
parentList.Add(new List<int> { 0, 1, 2 });
parentList.Add(new List<int> { 3, 4, 5 });
parentList.Add(new List<int> { 6, 7, 8 });
parentList.Add(new List<int> { 0, 4, 8 });
parentList.Add(new List<int> { 2, 4, 6 });
parentList.Add(new List<int> { 0, 3, 6 });
parentList.Add(new List<int> { 1, 4, 7 });
parentList.Add(new List<int> { 2, 5, 8 });

作为我计划的一部分,我正在生成一个列表

List<int> listToFind = new List<int>{1, 4, 7};

当我尝试执行以下操作时,它返回false,尽管它应该返回true。我在这做错了吗?

parentList.Contains(listToFind);

任何建议都将不胜感激。

谢谢,

Jankajg

2 个答案:

答案 0 :(得分:0)

要比较列表,请使用SequenceEqualMSDN

在您的情况下,您可以将其与Any

结合使用
var containsListToFind = parentList.Any(x => x.SequenceEqual(listToFind));

Contains无效,因为它使用列表中对象的默认.Equals方法。对于List<T>,这是参考比较,而不是值比较。由于listToFind与<{1}}中的对象不同,因此引用不同,parentList将找不到任何内容。

答案 1 :(得分:0)

您可以尝试以下操作:

parentList.Where(pl => listToFind.All(pl.Contains(lf)));