2011-05-15 1 views
7

List<FileInfo>을 반환하려면 fancy LINQ 쿼리를 사용하고 (List<FileInfo> oldList, List<FileInfo> newList) 메서드를 전달하고 두 목록간에 어떤 차이가 있는지 확인하십시오.두 목록의 차이점 <FileInfo>

기본적으로 oldList에서 사용할 수 없었던 newList에 추가 된 모든 파일의 목록을 가져 오려고합니다.

답변

15

FileInfo에 대한 IEqualityComparer은 다음과 같습니다 감안할 :

public class FileInfoEqualityComparer : IEqualityComparer<FileInfo> 
{ 
    public bool Equals(FileInfo x, FileInfo y) 
    { 
     return x.FullName.Equals(y.FullName); 
    } 

    public int GetHashCode(FileInfo obj) 
    { 
     return obj.FullName.GetHashCode(); 
    } 
} 
당신은 두 목록 사이의 차이를 찾기 위해 코드를 사용할 수 있습니다

:

var allItems = newList.Union(oldList); 
var commonItems = newList.Intersect(oldList); 
var difference = allItems.Except(commonItems, new FileInfoEqualityComparer()); 

항목이 newList 목록에 추가 찾으려면을 사용하는 다음 코드를 :

var addedItems = newList.Except(oldList, new FileInfoEqualityComparer());