我为测试创建这个类。我想与类的列表进行比较,并在列表 A 和列表 B 之间获得不同的类。在我的示例中,结果仅获得 ListB 类。
我对字符串列表做同样的薄并工作
类示例
public class FileNode
{
public string Source { get; set; }
public int Id { get; set; }
}
List<FileNode> ListA = new List<FileNode>
{
new FileNode{ Id = 1, Source="a" },
new FileNode{ Id = 2, Source="b" },
};
List<FileNode> ListB = new List<FileNode>
{
new FileNode{ Id = 1, Source="a" },
new FileNode{ Id = 2, Source="b" },
new FileNode{ Id = 3, Source="c" },
};
List<FileNode> ListAB = ListB.Where(m => !ListA.Contains(m)).ToList();
字符串示例,它的工作原理
List<string> a = new List<string> {"a","b","c","d","e" };
List<string> b = new List<string> {"a","b","c","d" };
List<string> ab = a.Where(m => !b.Contains(m)).ToList();
好吧,
Contains
将在元素上调用Equals
- 并且也可能使用GetHashCode
(我对此表示怀疑,但无论如何您都应该始终如一地覆盖它)。所以你需要覆盖Equals(object)
并在FileNode
中GetHashCode()
.(默认情况下,你将获得引用相等性。
请注意,一旦您开始尝试在将在数据库中执行的查询中使用Contains
,它的行为可能会完全不同 - 此时它不会查看您的Equals
/GetHashCode
方法。