IEqualityComparer работает не так, как задумано
у меня естьList
путей файлов, хранящихся на моем компьютере. Моя цель - сначала отфильтровать файлы с одинаковыми именами, а затем отфильтровать файлы одинакового размера.
Для этого я сделал два класса, реализующихIEqualityComparer<string>
и реализованоEquals
а такжеGetHashCode
методы.
var query = FilesList.Distinct(new CustomTextComparer())
.Distinct(new CustomSizeComparer());
Код для обоих классов приведен ниже:
public class CustomTextComparer : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
if (Path.GetFileName(x) == Path.GetFileName(y))
{
return true;
}
return false;
}
public int GetHashCode(string obj)
{
return obj.GetHashCode();
}
}
public class CustomSizeComparer : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
if (new FileInfo(x).Length == new FileInfo(y).Length)
{
return true;
}
else
{
return false;
}
}
public int GetHashCode(string obj)
{
return obj.GetHashCode();
}
}
Но код не работает.
Он не генерирует никаких исключений и не содержит ошибок компилятора, но проблема в том, что код не работает (не исключая дубликаты файлов).
Итак, как я могу исправить эту проблему? Могу ли я что-нибудь сделать, чтобы код работал правильно?