我必须将对象与同一类的原始属性进行比较。 意义,我要比较那些:。哪个更快?
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'实现中使用它们。 –