可以說我有類:我應該如何覆蓋HashSet的Equals和GetHashCode?
public class Ident
{
public String Name { get; set; }
public String SName { get; set; }
}
,也多了一個:
class IdenNode
{
public Ident id { get; set; }
public List<IdenNode> Nodes { get; set; }
public IdenNode()
{
Nodes = new List<IdenNode>();
}
}
我想用HashSet<IdenNode>
與記住,這兩個元素是相同的(等於)當且僅當他們的ID 。名字是平等的。
所以,我要重寫Equals
和GetHashCode
像下一個:
public override bool Equals(object obj)
{
IdenNode otherNode = obj as IdenNode;
return otherNode != null && otherNode.id != null && id.Name == otherNode.id.Name;
}
public override int GetHashCode()
{
if (id != null)
return id.Name.GetHashCode();
else
// what should I write here?
}
我是覺得對嗎?如果是,我應該在GetHashCode中放置什麼?
UPDATE
能告訴我是OK使用 「==」 和 「!=」 在equals方法?或者可能是ReferenceEquals或其他?
另外,我應該重寫運算符「==」和「!=」嗎?
字符串是一個可怕的東西,用作標識符,區分大小寫等。你不能使用像int或GUID(是它的一個字符串,但它保證獨特的系統) – Maess
@Maess使一個好點子。如果兩個人擁有相同的姓氏和名字會怎麼樣? –
@Maess一個GUID不是一個字符串! :) –