我有一个父列表如下。
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
答案 0 :(得分:0)
要比较列表,请使用SequenceEqual
(MSDN)
在您的情况下,您可以将其与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)));