我有以下代码:

List<List<int>> list = new List<List<int>>();
list.Add(new List<int> { 0, 1 });

if (list.Contains(new List<int> { 0, 1 }))      // false
  ...

我正在尝试检查列表是否包含{0,1},但条件为假(我不知道为什么,也许是因为'new'关键字)。
如果这不是正确的方法,我想知道如何检查。

谢谢!

最佳答案

List<T>.Contains调用Equals()方法来比较对象。
由于内部List<T>不会覆盖Equals,因此您将获得引用相等性。

您可以通过创建一个自定义的IEqualityComparer<List<T>>来解决此问题,该Contains()按值进行比较并将其传递给ojit_code。

您也可以只使用LINQ:

if (list.Any(o => o.SequenceEqual(new[] { 0, 1 }))

关于c# - List <List <>>。Contains()不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9725647/

10-17 02:17