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