C# 中 Java Objects.hash 和 Objects.hash 代码的等效项
What is equivalent for Java Objects.hash and Objects.hashCode in C#
从 Java 转为 C# 开发人员。在 Java 中,我使用了很多 Objects.hash(array) and Objects.hashCode(object) 来在 hashCode 函数中构建对象的哈希码。我在 C# 中找不到这些函数的任何等效项。有什么想法吗?
事实上,我可以调用 GetHashCode
并将它们组合起来,如 Concise way to combine field hashcodes? 所示,但这需要对引用类型进行大量 null
检查,这使得代码比可比代码长得多Java代码。
在Java中:
public class MyObject {
private Integer type;
private String[] attrs;
@Override
public int hashCode() {
int hash = 1, p = 31;
hash = p * hash + Objects.hashCode(type); // Handle Null case
hash = p * hash + Objects.hash(attrs); // Handle Null case
return hash;
}
}
在 C# 中:
public class MyObject {
private int? type;
private string[] attrs;
public override int GetHashCode()
int hash = 1, p = 31;
hash = p * hash + hash_of(type); // Any utilities?
hash = p * hash + hash_of_array(attrs); // Any utilities?
return hash;
}
}
注意:我不是在寻找兼容的结果(因为我知道哈希码对于相似的对象会有所不同,甚至在同一框架的 versions/platform 之间也可能不同),而是代码大小 &简洁的方式。
与此等效的 .NET 是新的 System.HashCode
, in particular the HashCode.Combine<>
方法,您可以使用该方法从多个值创建哈希码:
public class MyObject
{
private int? type;
private string[] attrs;
public override int GetHashCode()
=> HashCode.Combine(type, attrs);
// remember to also override Equals
}
请注意,此类型仅在 .NET Core 中可用。如果你是 运行 .NET Framework,你将不得不自己实现哈希码计算。好的方法是 documented here.
从 Java 转为 C# 开发人员。在 Java 中,我使用了很多 Objects.hash(array) and Objects.hashCode(object) 来在 hashCode 函数中构建对象的哈希码。我在 C# 中找不到这些函数的任何等效项。有什么想法吗?
事实上,我可以调用 GetHashCode
并将它们组合起来,如 Concise way to combine field hashcodes? 所示,但这需要对引用类型进行大量 null
检查,这使得代码比可比代码长得多Java代码。
在Java中:
public class MyObject {
private Integer type;
private String[] attrs;
@Override
public int hashCode() {
int hash = 1, p = 31;
hash = p * hash + Objects.hashCode(type); // Handle Null case
hash = p * hash + Objects.hash(attrs); // Handle Null case
return hash;
}
}
在 C# 中:
public class MyObject {
private int? type;
private string[] attrs;
public override int GetHashCode()
int hash = 1, p = 31;
hash = p * hash + hash_of(type); // Any utilities?
hash = p * hash + hash_of_array(attrs); // Any utilities?
return hash;
}
}
注意:我不是在寻找兼容的结果(因为我知道哈希码对于相似的对象会有所不同,甚至在同一框架的 versions/platform 之间也可能不同),而是代码大小 &简洁的方式。
与此等效的 .NET 是新的 System.HashCode
, in particular the HashCode.Combine<>
方法,您可以使用该方法从多个值创建哈希码:
public class MyObject
{
private int? type;
private string[] attrs;
public override int GetHashCode()
=> HashCode.Combine(type, attrs);
// remember to also override Equals
}
请注意,此类型仅在 .NET Core 中可用。如果你是 运行 .NET Framework,你将不得不自己实现哈希码计算。好的方法是 documented here.