c# - 可以改进 IEqualityComparer 的实现吗?

标签 c# iequalitycomparer

<分区>

我没有发现这段代码有任何问题,但感觉好像遗漏了什么。也许可以减少行数。或者甚至有一个错误要修复?我愿意接受任何建议。

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

最佳答案

如果 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);
   }
}

关于c# - 可以改进 IEqualityComparer 的实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1779175/

相关文章:

c# - 比较两个 List<T> 并将其合并到新的 List<T> 中

c# - 实现 IEqualityComparer 会修改相等性测试结果吗?

c# - 将 DLL 动态加载到分离的应用程序域中然后卸载

C#:微软为什么不让 ReadOnlyCollection<T> 继承自 ReadOnlyCollectionBase?

c# - 在 C# 中对具有两个属性的对象实现 IEqualityComparer<T>

c# - 如果不能保证字符串或整数的 getHashCode() 是唯一的,为什么要使用它?

c# - 使用 IEqualityComparer 查找记录

c# - HighCharts 时间序列缺失点?

c# - 具有不同数据类型数组作为值的字典

javascript - 将 C# 变量值传递给代码隐藏类中生成的脚本中的 JavaScript 变量