【问题标题】:c# List.Contain(List) not returning true for containing listc# List.Contain(List) 不为包含列表返回 true
【发布时间】:2013-09-10 08:40:16
【问题描述】:

我有一个如下的父列表。

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);

任何建议将不胜感激。

谢谢,

詹卡吉格

【问题讨论】:

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


    【解决方案1】:

    要比较列表,请使用SequenceEqual (MSDN)

    在您的情况下,您可以将其与Any 结合使用:

    var containsListToFind = parentList.Any(x => x.SequenceEqual(listToFind));
    

    Contains 不起作用,因为它使用列表中对象的默认 .Equals 方法。对于List&lt;T&gt;,这是参考比较,而不是值比较。由于listToFindparentList 中的对象不同对象,因此引用不同,Contains 将找不到任何东西。

    【讨论】:

    • 感谢 elmugrat。我也在考虑同一行,但不知道 sequenceEqual。
    【解决方案2】:

    您可以尝试以下方法:

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

    【讨论】:

    • 这可能有效。但@elmugrat 提供的解决方案正是我想要的
    猜你喜欢
    • 1970-01-01
    • 2014-10-14
    • 2016-06-20
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2022-01-20
    • 2015-10-25
    • 1970-01-01
    相关资源
    最近更新 更多