List Intersect returning null
题
I have two List<FileInfo>
and I want to return the common FileItem
between them.
List<FileInfo> outputList = new List<FileInfo>();
outputList = list1.Intersect(list2).ToList();
However, I'm getting back an empty List.
Both the lists contain FileInfo
's found by
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder);
IEnumerable<System.IO.FileInfo> fileList =
dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories);
And filtered by queries.
解决方案
I suspect that FileInfo
doesn't override Equals
/GetHashCode
, so two distinct objects will be unequal even if they refer to the same file. Three options:
- Convert the lists to paths if you don't need them as
FileInfo
- Create an
IEqualityComparer<FileInfo>
and pass that toIntersect
- Implement
IntersectBy
in the same style asDistinctBy
in MoreLINQ and propose it as a patch to the project :) (I thought we already had it, but apparently not...)
其他提示
The references to the FileInfo
objects in your two lists will be different, and therefore Intersect
will produce an empty list.
You would need to create a class that implements the IEqualityComparer<FileInfo>
interface and pass an instance of this class to Intersect
in order to get the result you expect.
不隶属于 StackOverflow