Разница между двумя списками <FileInfo> - PullRequest
7 голосов
/ 15 мая 2011

Могу ли я использовать причудливый запрос LINQ для возврата List<FileInfo>, передав его в метод (List<FileInfo> oldList, List<FileInfo> newList) и увидев разницу между двумя списками?

По сути, я хочу получить список любых файлов, добавленных в newList, которые не были доступны в oldList.

1 Ответ

16 голосов
/ 15 мая 2011

Учитывая IEqualityComparer для FileInfo, показанного ниже:

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());
...