我不明白这个代码的任何问题,但感觉就像我失去了一些东西。也许是可以减少的行数。还是说没有一个bug是固定的?我愿意接受任何建议。

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

其他提示

相比只是Name如果你总是比较同一目录下的文件才会工作。我建议由FullName比较来代替。

可以容易地将相等比较器的范围由实现它为FileSystemInfo,基类FileInfoDirectoryInfo的延伸到目录。

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();
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top