我必須將對象與同一類的原始屬性進行比較。 意義,我要比較那些:。哪個更快?
struct Identifier
{
string name;
string email;
}
與兩個字符串的姓名和電子郵件。 我知道我可以爲名稱和電子郵件創建一個新的標識符實例,並將其傳遞給equals()。我的應用程序必須非常快速且節省資源。
我知道通過散列碼比較不是一個好方法,因爲如解釋here有碰撞。但碰撞對我來說沒問題,我只需要它快。
所以,
1)是通過GetHashCode的(比較檢查,如果兩個對象的哈希碼是相同的)的速度比的equals()?
2)我應該改爲創建一個新的比較兩個值的標識符實例,做一個新的方法,直接取值?例如
struct Identifier {
string name;
string email;
bool Equals(string name, string email) {
// todo comparison via hashcode or equals
}
}
I would use the Equals() and GetHashCode() method generated by resharper.
GetHashCode不是用於相等比較,而是獲取哈希碼。 C#中的Hashcode是32位信息,而您的字符串在技術上可能包含無限量的信息。所以非常不同的字符串可能具有相同的哈希碼。推薦閱讀 - http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-overridden –
請問C#緩存一個字符串的hashCode?因爲如果你必須實時計算它,那比比較兩個字符串要慢。 – Thilo
@Thilo [不,它不](http://referencesource.microsoft.com/#mscorlib/system/string.cs,0a17bbac4851d0d4)。但是計算兩個字符串的哈希代碼非常快,您應該在自己的'GetHashCode'實現中使用它們。 –