如果您有resharper,您可以使用Alt-Ins - > Equality成員生成這些方法。
這裏是生成的代碼爲您KeyStruct:
public struct KeyStruct : IEquatable<KeyStruct>
{
public string Value1 { get; private set; }
public long Value2 { get; private set; }
public KeyStruct(string value1, long value2)
: this()
{
Value1 = value1;
Value2 = value2;
}
public bool Equals(KeyStruct other)
{
return Equals(other.Value1, Value1) && other.Value2 == Value2;
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (obj.GetType() != typeof (KeyStruct)) return false;
return Equals((KeyStruct) obj);
}
public override int GetHashCode()
{
unchecked
{
return ((Value1 != null ? Value1.GetHashCode() : 0)*397)^Value2.GetHashCode();
}
}
public static bool operator ==(KeyStruct left, KeyStruct right)
{
return left.Equals(right);
}
public static bool operator !=(KeyStruct left, KeyStruct right)
{
return !left.Equals(right);
}
}
是的,它主要是關於我如何將着手實施一個高效的GetHashCode() - 方法,不是在速度方面,但在「數據方面選擇」。 我現在知道,我有兩個字段,一個是字符串(可以爲null,這是一個非常重要的要求,因爲我正在和一個遺留系統交談),另一個字段很長。 – StormianRootSolver 2010-06-20 15:43:21
只需提供struct的哈希碼作爲結構數據哈希碼的組合(如sum或xor)。例如: 公衆覆蓋INT的GetHashCode() { uncheked //防止算術溢出 { 返回StringComparer.OrdinalIgnoreCase.GetHashCode(_myFirstField)+ EqualityComparer .Default.GetHashCode(_myLongField); } } –
STO
2010-06-20 15:48:03
可能有意義把它放到你的答案中。 – ChaosPandion 2010-06-20 15:51:31