c# – IEqualityComparer不按预期工作

c# – IEqualityComparer不按预期工作,第1张

概述我的计算机上存储的文件路径列表.我的目标是首先过滤出具有相同名称的文件,然后过滤出具有相同大小的文件. 为此,我已经实现了两个类实现IEqualityComparer< string>,并实现了Equals和GetHashCode方法. var query = FilesList.Distinct(new CustomTextComparer()) .Di 我的计算机上存储的文件路径列表.我的目标是首先过滤出具有相同名称的文件,然后过滤出具有相同大小的文件.
为此,我已经实现了两个类实现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();    }}

但代码不起作用.

它不会抛出任何异常,也没有任何编译器错误,但问题是代码不起作用(不排除重复的文件).

那么我该如何解决这个问题呢?有什么可以做的,使代码正常工作.

解决方法 更改您的GetHashCode来处理比较的值.即为您的尺寸比较:
public int GetHashCode(string obj){    return fileInfo(x).Length.GetHashCode();}

另一方面:

public int GetHashCode(string obj){    return Path.Getfilename(obj).GetHashCode();}

根据这个答案 – What’s the role of GetHashCode in the IEqualityComparer<T> in .NET?,首先评估哈希码.在碰撞的情况下调用等于.

显然,在fileInfos上工作,而不是字符串是合理的.

所以也许

fileList.Select(x => new fileInfo(x))        .distinct(new CustomTextComparer())        .distinct(new CustomSizeComparer());

当然,您必须更改您的比较器以正确的类型工作.

总结

以上是内存溢出为你收集整理的c# – IEqualityComparer不按预期工作全部内容,希望文章能够帮你解决c# – IEqualityComparer不按预期工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1261138.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存