我没有看到这个代码有任何问题,但感觉我错过了什么。也许可以减少行数。或者甚至有一个错误需要修复?我愿意接受任何建议。
public class NameComparer : IEqualityComparer<FileInfo>
{
public bool Equals (FileInfo x, FileInfo y)
{
if (x == null) {
return y == null;
}
if (y == null) {
return false;
}
return x.Name.Equals (y.Name);
}
public int GetHashCode (FileInfo obj)
{
return obj.Name.GetHashCode ();
}
}
答案 0 :(得分:9)
如果FileInfo的相等运算符返回true,则应首先返回true。另外,指定要执行的字符串比较的类型。大概你想要忽略大小写,因为这些是文件名。
public class NameComparer : IEqualityComparer<FileInfo>
{
public bool Equals(FileInfo x, FileInfo y)
{
if (x == y)
{
return true;
}
if (x == null || y == null)
{
return false;
}
return string.Equals(x.FullName, y.FullName, StringComparison.OrdinalIgnoreCase);
}
public int GetHashCode (FileInfo obj)
{
return StringComparer.OrdinalIgnoreCase.GetHashCode(obj.FullName);
}
}
答案 1 :(得分:2)
仅比较Name
只有在您始终比较同一目录的文件时才有效。我建议用FullName
进行比较。
通过为FileSystemInfo
(FileInfo
和DirectoryInfo
的基类实现等式比较器,可以轻松地将等式比较器的范围扩展到目录。
public sealed class FullNameComparer : IEqualityComparer<FileSystemInfo>
{
public bool Equals(FileSystemInfo x, FileSystemInfo y)
{
if (x == y)
{
return true;
}
if (x == null || y == null)
{
return false;
}
return String.Equals(x.FullName.TrimEnd('\\'), y.FullName.TrimEnd('\\'), StringComparison.OrdinalIgnoreCase);
}
public int GetHashCode(FileSystemInfo obj)
{
return obj.FullName.GetHashCode();
}
}