Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ-Distinct被忽略了吗?_C#_.net_Linq_Distinct_Gethashcode - Fatal编程技术网

C# LINQ-Distinct被忽略了吗?

C# LINQ-Distinct被忽略了吗?,c#,.net,linq,distinct,gethashcode,C#,.net,Linq,Distinct,Gethashcode,因此,我的LINQ代码有一个问题,我必须选择一个不同的数据集,我实现了以下IEqualityComparer: public class ProjectRoleComparer : IEqualityComparer<ProjectUserRoleMap> { public bool Equals(ProjectUserRoleMap x, ProjectUserRoleMap y) { return x.RoleID.Equals(y.RoleID)

因此,我的LINQ代码有一个问题,我必须选择一个不同的数据集,我实现了以下
IEqualityComparer

public class ProjectRoleComparer : IEqualityComparer<ProjectUserRoleMap>
{
    public bool Equals(ProjectUserRoleMap x, ProjectUserRoleMap y)
    {
        return x.RoleID.Equals(y.RoleID);
    }
    public int GetHashCode(ProjectUserRoleMap obj)
    {
        return obj.GetHashCode();
    }
}
这段代码给了我6个条目,而我想要的条目数只有4个我使用LINQ是否有问题?


作为参考,
ProjectUserRoleMap
对象有一个RoleID,(int)

您对
GetHashCode
的实现是错误的。Return
obj.RoleID.GetHashCode()

背景:
使用IEqualityComparer的代码通常首先比较两个对象的哈希代码。只有当这些散列码相同时,才会调用
等于

它是这样实现的,因为两个不相等的对象可以具有相同的哈希键,但两个相等的对象永远不能具有不同的哈希键-如果
GetHashCode()
实现正确。
这些知识用于提高比较的效率和性能,因为
GetHashCode
的实现被认为是快速、廉价的操作

试试看:

public int GetHashCode(ProjectUserRoleMap obj)
{
    return obj.RoleID.GetHashCode();
}

哇!太简单了!我怎么会错过呢?工作完美,正如现在所预期的那样。谢谢!
public int GetHashCode(ProjectUserRoleMap obj)
{
    return obj.RoleID.GetHashCode();
}