C# 使用IEqualityComparer<;T>;确定唯一性
我正在使用哈希集。我希望确保没有重复的值。不过,我现在可以这样做C# 使用IEqualityComparer<;T>;确定唯一性,c#,C#,我正在使用哈希集。我希望确保没有重复的值。不过,我现在可以这样做 [Serializable()] public class SafetyObsDS { public int Count { get { return set.Count; } } HashSet<CompResults> set; public SafetyObsDS() { set = new HashSet<CompResu
[Serializable()]
public class SafetyObsDS
{
public int Count
{
get { return set.Count; }
}
HashSet<CompResults> set;
public SafetyObsDS()
{
set = new HashSet<CompResults>(new CompareToComparer());
}
public bool Add(CompResults cr)
{
set.Remove(cr);
return set.Add(cr);
}
public bool Remove(CompResults cr)
{
return set.Remove(cr);
}
[Serializable()]
private class CompareToComparer : IEqualityComparer<CompResults>
{
public CompareToComparer() {}
public bool Equals(CompResults cr1, CompResults cr2)
{
return (cr1.CompareTo(cr2) == 0);
}
public int GetHashCode(CompResults cr)
{
return (cr.SectionID);
}
}
}
[Serializable()]
public class CompResults : IComparable
{
public int SectionID { get; set; }
public ComResults(int sectID)
{
SectionID = sectID;
}
public int CompareTo(object obj)
{
return SectionID - (obj as CompResults).SectionID;
}
}
[Serializable()]
公共类安全OBDS
{
公共整数计数
{
获取{return set.Count;}
}
散列集;
公共安全
{
set=newhashset(newcompareTomarer());
}
公共业务添加(综合结果cr)
{
设置。移除(cr);
返回集合。添加(cr);
}
公共布尔删除(压缩结果cr)
{
返回集。删除(cr);
}
[可序列化()]
私有类比较器比较器:IEqualityComparer
{
公共比较器比较器(){}
公共布尔等于(压缩结果cr1,压缩结果cr2)
{
返回值(cr1.CompareTo(cr2)==0);
}
public int GetHashCode(压缩结果cr)
{
返回(cr.SectionID);
}
}
}
[可序列化()]
公共类压缩结果:i可比较
{
public int SectionID{get;set;}
公共通信结果(int sectID)
{
SectionID=SectionID;
}
公共整数比较(对象对象对象)
{
返回SectionID-(obj作为压缩结果)。SectionID;
}
}
我遗漏了构造函数和其他不必要的代码,如其他字段
当我执行以下操作时,我会收到不想要的结果:
Add(new CompResults(1)); Result: true
Add(new CompResults(1)); Result: true <--- this is a dup and I don't want it to add
Remove(new CompResults(1)); Result: true
增加(新的综合结果(1));结果:正确
增加(新的综合结果(1));结果:true我认为问题在于,在您的
Add()
代码中,您首先删除现有项,然后添加新的(重复的)项。这将总是成功的,因为没有任何重复项,这就是它返回true
的原因。删除Remove()
调用,它将自行修复