List Intersect returning null



我有两个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);

并通过查询进行筛选。

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

  • 如果不需要FileInfo,请将列表转换为路径
  • 创建一个IEqualityComparer<FileInfo>并将其传递给Intersect
  • 以与MoreLINQ中的DistinctBy相同的风格实现IntersectBy,并将其作为项目的补丁:)(我以为我们已经有了,但显然没有…)

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

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

相关内容

  • 没有找到相关文章

最新更新