6

私は2つ持っています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);

そして、クエリによってフィルタリングされます。

4

2 に答える 2

6

これは/をFileInfoオーバーライドしないと思うので、同じファイルを参照している場合でも、2つの異なるオブジェクトは等しくありません。3つのオプション:EqualsGetHashCode

  • リストが必要ない場合は、リストをパスに変換します。FileInfo
  • を作成し、IEqualityComparer<FileInfo>それをに渡しますIntersect
  • MoreLINQIntersectByと同じスタイルで実装しDistinctBy、プロジェクトへのパッチとして提案します:)(私はすでにそれを持っていると思っていましたが、明らかにそうではありません...)
于 2012-08-02T12:16:29.653 に答える
3

2つのリスト内のオブジェクトへの参照は異なるため、空のリストが生成されます。FileInfoIntersect

期待する結果を得るには、インターフェイスを実装するクラスを作成し、IEqualityComparer<FileInfo>このクラスのインスタンスをに渡す必要があります。Intersect

于 2012-08-02T12:15:23.167 に答える