Имейте объектную модель, как показано ниже, с HashSets:
Когда я пытаюсь найти соответствующий набор с оператором ниже, не работает. Может кто-нибудь подсказать, что мне здесь не хватает?
Решит ли HashSet.CreateSetComparer проблему, если да, то не могли бы вы порекомендовать, как ее использовать?
Заявление о перекрытии HashSet:
var requirementSets = new HashSet<RequirementSet>();
// requirementSets has some data.
RequirementSet matchingSet = requirementSets.FirstOrDefault(e => e.RequirementOption 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;
}
}
}