我有两个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
,以便获得您期望的结果。