Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.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# 哈希集重叠不能按预期工作_C#_Hashset_Object Model - Fatal编程技术网

C# 哈希集重叠不能按预期工作

C# 哈希集重叠不能按预期工作,c#,hashset,object-model,C#,Hashset,Object Model,使用HashSet创建如下所示的对象模型: 当我试图用下面的语句查找匹配集时,它不起作用。 有人能告诉我我缺少什么吗 HashSet.CreateSetComparer会解决这个问题吗?如果会,请您建议如何使用它 HashSet重叠语句: var requirementSets = new HashSet<RequirementSet>(); // requirementSets has some data. RequirementSet matchingSet = require

使用HashSet创建如下所示的对象模型:

当我试图用下面的语句查找匹配集时,它不起作用。 有人能告诉我我缺少什么吗

HashSet.CreateSetComparer会解决这个问题吗?如果会,请您建议如何使用它

HashSet重叠语句:

var requirementSets = new HashSet<RequirementSet>();
// requirementSets has some data.

RequirementSet matchingSet = requirementSets.FirstOrDefault(e => e.RequirementOption s.Overlaps(lineItemRequirementSet.RequirementOptions));
var requirementSets=newhashset();
//需求集有一些数据。
RequirementSet matchingSet=RequirementSet.FirstOrDefault(e=>e.RequirementOptions s.Overlaps(lineItemRequirementSet.RequirementOptions));
对象模型:

public class RequirementSet : IEquatable<RequirementSet>
{
    public ISet<RequirementOption> RequirementOptions { get; } = new HashSet<RequirementOption>();

public bool Equals(RequirementSet other)
    {
        if (ReferenceEquals(null, other))
        {
            return false;
        }

        if (ReferenceEquals(this, other))
        {
            return true;
        }

        return Equals(RequirementOptions, other.RequirementOptions);
    }

    public override bool Equals(object obj)
    {
        if (ReferenceEquals(null, obj))
        {
            return false;
        }

        if (ReferenceEquals(this, obj))
        {
            return true;
        }

        if (obj.GetType() != this.GetType())
        {
            return false;
        }

        return Equals((RequirementSet) obj);
    }

    public override int GetHashCode()
    {
        return RequirementOptions != null ? RequirementOptions.GetHashCode() : 0;
    }
}

public class RequirementOption : IEquatable<RequirementOption>
{
    public ISet<Requirement> Requirements { get; } = new HashSet<Requirement>();

public bool Equals(RequirementOption other)
    {
        if (ReferenceEquals(null, other))
        {
            return false;
        }

        if (ReferenceEquals(this, other))
        {
            return true;
        }

        return Equals(Requirements, other.Requirements);
    }

    public override bool Equals(object obj)
    {
        if (ReferenceEquals(null, obj))
        {
            return false;
        }

        if (ReferenceEquals(this, obj))
        {
            return true;
        }

        if (obj.GetType() != this.GetType())
        {
            return false;
        }

        return Equals((RequirementOption) obj);
    }

    public override int GetHashCode()
    {
        return Requirements != null ? Requirements.GetHashCode() : 0;
    }
}

public class Requirement : IEquatable<Requirement>
{
    public string Model {get; set;}

public bool Equals(Requirement other)
    {
        if (ReferenceEquals(null, other))
        {
            return false;
        }

        if (ReferenceEquals(this, other))
        {
            return true;
        } 

        return ModelName == other.ModelName;
    }

    public override bool Equals(object obj)
    {
        if (ReferenceEquals(null, obj))
        {
            return false;
        }

        if (ReferenceEquals(this, obj))
        {
            return true;
        }

        if (obj.GetType() != this.GetType())
        {
            return false;
        } 

        return Equals((Requirement) obj);
    }

    public override int GetHashCode()
    {
        unchecked
        {
            var hashCode = ModelName != null ? ModelName.GetHashCode();

            return hashCode;
        }
    }
}
公共类要求集:IEquatable
{
public ISet RequirementOptions{get;}=new HashSet();
公共布尔等于(要求集其他)
{
if(ReferenceEquals(null,其他))
{
返回false;
}
if(ReferenceEquals(this,other))
{
返回true;
}
返回等于(RequirementOptions,其他RequirementOptions);
}
公共覆盖布尔等于(对象对象对象)
{
if(ReferenceEquals(null,obj))
{
返回false;
}
if(ReferenceEquals(this,obj))
{
返回true;
}
如果(obj.GetType()!=this.GetType())
{
返回false;
}
返回等于((需求集)obj);
}
公共覆盖int GetHashCode()
{
返回RequirementOptions!=null?RequirementOptions.GetHashCode():0;
}
}
公共类要求选项:IEquatable
{
公共ISet要求{get;}=new HashSet();
公共布尔等于(要求选项其他)
{
if(ReferenceEquals(null,其他))
{
返回false;
}
if(ReferenceEquals(this,other))
{
返回true;
}
回报等于(要求、其他要求);
}
公共覆盖布尔等于(对象对象对象)
{
if(ReferenceEquals(null,obj))
{
返回false;
}
if(ReferenceEquals(this,obj))
{
返回true;
}
如果(obj.GetType()!=this.GetType())
{
返回false;
}
返回等于((要求选项)obj);
}
公共覆盖int GetHashCode()
{
返回要求!=null?要求。GetHashCode():0;
}
}
公共类要求:IEquatable
{
公共字符串模型{get;set;}
公共布尔等于(其他要求)
{
if(ReferenceEquals(null,其他))
{
返回false;
}
if(ReferenceEquals(this,other))
{
返回true;
} 
返回ModelName==other.ModelName;
}
公共覆盖布尔等于(对象对象对象)
{
if(ReferenceEquals(null,obj))
{
返回false;
}
if(ReferenceEquals(this,obj))
{
返回true;
}
如果(obj.GetType()!=this.GetType())
{
返回false;
} 
返回等于((要求)obj);
}
公共覆盖int GetHashCode()
{
未经检查
{
var hashCode=ModelName!=null?ModelName.GetHashCode();
返回哈希码;
}
}
}

您的代码无法编译。您试图测试哪些实体的重叠?它们必须是相同的对象类型。是否覆盖了
GetHashCode()?您的代码无法编译。您试图测试哪些实体的重叠?它们必须是相同的对象类型。是否覆盖了
GetHashCode()