带有Equals的库和用于.NET的GetHashCode帮助器方法

dea*_*mon 9 .net c# java gethashcode guava

Google Guava提供了很好的帮助来实现equals,hashCode如下例所示:

public int hashCode() {
  return Objects.hashCode(lastName, firstName, gender);
}
Run Code Online (Sandbox Code Playgroud)

是否有类似的Microsoft .NET库?

Jon*_*nna 20

我不明白为什么你需要一个.如果您想基于GetHashCode3个不同项的默认值创建哈希码,那么只需使用:

Tuple.Create(lastName, firstName, gender).GetHashCode()
Run Code Online (Sandbox Code Playgroud)

这将归结为相当于:

int h1 = lastName.GetHashCode();
int h2 = firstName.GetHashCode();
int h3 = gender.GetHashCode();
return (((h1 << 5) + h1) ^ (((h2 << 5) + h2) ^ h3));
Run Code Online (Sandbox Code Playgroud)

对于这种通用组合来说,这是非常合理的.

同样:

Tuple.Create(lastName, firstName, gender).Equals(Tuple.Create(lastName2, firstName2, gender2))
Run Code Online (Sandbox Code Playgroud)

归结为相当于调用:

return ((lastName == null && lastName2 == null) || (lastName != null && lastName.Equals(lastName2)))
  && ((firstName == null && firstName2 == null) || (firstName != null && firstName.Equals(lastName2)))
  && ((gender == null && gender2 == null) || (gender != null && gender.Equals(lastName2)));
Run Code Online (Sandbox Code Playgroud)

再次,大约和你期望的一样好.