Distinct() не удаляет одинаковые элементы
У меня есть следующий код который структурирует файлы и директории в директориях в виде дерева, но вот есть проблема, как мне получить новые файлы в какой-то из папок? Допустим, в папке N создадут файл X, то как мне при новом обходе всех директорий получить только новые файлы?
То, как я делаю дерево:
class Item
{
public string Name { get; set; }
public string Path { get; set; }
}
class FileItem : Item
{
public string Directory { get; set; }
}
class DirectoryItem : Item
{
public List<Item> Items { get; set; }
public DirectoryItem()
{
Items = new List<Item>();
}
}
class ItemProvider
{
public List<Item> GetItems(string path)
{
var items = new List<Item>();
var dirInfo = new DirectoryInfo(path);
foreach (var directory in dirInfo.GetDirectories())
{
var item = new DirectoryItem
{
Name = directory.Name,
Path = directory.FullName,
Items = GetItems(directory.FullName)
};
items.Add(item);
}
foreach (var file in dirInfo.GetFiles())
{
var item = new FileItem
{
Name = file.Name,
Path = file.FullName,
Directory = file.Directory.FullName
};
items.Add(item);
}
return items;
}
}
А вот моя попытка найти новые файлы. На первой итерации цикла по-идее элементов вообще не должно быть т.к old и current имеют идентичные элементы, однако я не получаю этого, а получаю полностью конкатенированную коллекцию (я знаю, что Distinct вроде смотрит на хешкод)
var current = provider.GetItems(path);
var old = new List<Item>();
while (true)
{
old = current;
current = provider.GetItems(path);
var newItems = current.Concat(old).Distinct();
}