6

我有两个List<FileInfo>,我想返回FileItem它们之间的共同点。

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

但是,我得到了一个空列表。

两个列表都包含FileInfo's found by

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

并按查询过滤。

4

2 回答 2

6

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

  • 如果您不需要将列表转换为路径FileInfo
  • 创建一个IEqualityComparer<FileInfo>并将其传递给Intersect
  • 以与MoreLINQIntersectBy相同的风格实现,并将其作为项目的补丁提出来 :)(我以为我们已经有了它,但显然没有......)DistinctBy
于 2012-08-02T12:16:29.653 回答
3

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

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

于 2012-08-02T12:15:23.167 回答