C# 哈希集重叠不能按预期工作
使用HashSet创建如下所示的对象模型: 当我试图用下面的语句查找匹配集时,它不起作用。 有人能告诉我我缺少什么吗 HashSet.CreateSetComparer会解决这个问题吗?如果会,请您建议如何使用它 HashSet重叠语句: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
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()代码>?