문제

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 to Intersect
  • Implement IntersectBy in the same style as DistinctBy 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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top