【发布时间】:2023-04-07 01:11:01
【问题描述】:
我有一个自定义类列表,在添加到列表之前我想检查列表是否具有相同的实例(不是一个属性 - 全部)
public class Function
{
public string Name;
public string RT;
public int ParamCount;
public List<string> ParamDT;
public Function()
{
ParamDT = new List<string>();
}
}
我尝试覆盖 Equals() 和 GetHashCode() 但它没有用 等于()
public override bool Equals(object obj)
{
var item = obj as Function;
if (item == null)
{
return false;
}
return this.Name == item.Name && this.RT == item.RT &&
this.ParamCount == item.ParamCount && this.ParamDT.Equals(item.ParamDT);
}
GetHashCode()
public override int GetHashCode()
{
return this.Name.GetHashCode();
}
【问题讨论】:
-
能否提供Equals/hashcode方法。如果您只想要每种类型的一个实例,那么集合不是更好的数据结构吗
-
GetHashCode必须从Equals中检查的所有属性或字段构建哈希码以与Equals保持一致。如果您将对象添加到HashSet<Function>或将它们用作Dictionary<K, V>中的键,这一点很重要。
标签: c#