List Intersect返回null

时间:2012-08-02 12:12:00

标签: c# linq list fileinfo intersect

我有两个List<FileInfo>,我希望在它们之间返回公共FileItem

List<FileInfo> outputList = new List<FileInfo>();
outputList = list1.Intersect(list2).ToList();

但是,我要回到一个空的列表。

这两个列表都包含

找到的FileInfo
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder);
IEnumerable<System.IO.FileInfo> fileList = 
dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories);

按查询过滤。

2 个答案:

答案 0 :(得分:6)

我怀疑FileInfo没有覆盖Equals / GetHashCode,因此即使两个不同的对象引用同一个文件,它们也是不相等的。三个选项:

  • 如果您不需要FileInfo
  • ,请将列表转换为路径
  • 创建IEqualityComparer<FileInfo>并将其传递给Intersect
  • 以与MoreLINQ中的IntersectBy相同的方式实施DistinctBy并将其作为项目的补丁提出:)(我以为我们已经拥有它,但显然不是...... )

答案 1 :(得分:3)

引用到两个列表中的FileInfo个对象会有所不同,因此Intersect会生成一个空列表。

您需要创建一个实现IEqualityComparer<FileInfo>接口的类,并将此类的实例传递给Intersect,以获得您期望的结果。