.Net Framework 中的 HashCode 等价物
HashCode equivalent in .Net Framework
在将 .NET Core 项目转换为 .NET Framework 时,需要注意的一件事是使用 Hashcode 现在需要转换为等效的东西。可以看出,Hashcode 特定于 .NET 核心版本和一些扩展。
https://docs.microsoft.com/en-us/dotnet/api/system.hashcode?view=dotnet-plat-ext-3.1
想知道在 .NET Framework 中的用法是否足够接近,如果有任何内置对象类型。
编辑:
System.HashCode
在 .NET Core 中也可用。为此,您可以使用 HashCode.Combine
,请参阅:https://docs.microsoft.com/en-us/dotnet/api/system.hashcode?view=netcore-2.1
var combined = HashCode.Combine("one", "two");
(下面是之前的回答)
可在此处找到详尽而详尽的答案:
如果您只想要一个简单的答案,您可以将对象哈希组合成一个新结构(元组、匿名 class 等),然后对结果调用 GetHashCode()
。
例如
public override int GetHashCode() {
return new { MyField1, MyField2 }.GetHashCode();
}
详细说明上面链接的答案,如果你想让它更容易(?),你当然可以创建一个通用的静态助手 class 来为你完成工作:
public class MyHashCode
{
public static int Hash(params object[] values)
=> CustomHash(1009, 9176, values.Select(v => v.GetHashCode()).ToArray());
// From answer
public static int CustomHash(int seed, int factor, params int[] vals)
{
int hash = seed;
foreach (int i in vals)
{
hash = (hash * factor) + i;
}
return hash;
}
}
并这样称呼它:
public class UnitTest1
{
[Fact]
public void Test1()
{
string s1 = "yezz";
string s2 = "nope";
var hash = Utils.MyHashCode.Hash(s1, s2);
}
}
在将 .NET Core 项目转换为 .NET Framework 时,需要注意的一件事是使用 Hashcode 现在需要转换为等效的东西。可以看出,Hashcode 特定于 .NET 核心版本和一些扩展。
https://docs.microsoft.com/en-us/dotnet/api/system.hashcode?view=dotnet-plat-ext-3.1
想知道在 .NET Framework 中的用法是否足够接近,如果有任何内置对象类型。
编辑:
System.HashCode
在 .NET Core 中也可用。为此,您可以使用 HashCode.Combine
,请参阅:https://docs.microsoft.com/en-us/dotnet/api/system.hashcode?view=netcore-2.1
var combined = HashCode.Combine("one", "two");
(下面是之前的回答)
可在此处找到详尽而详尽的答案:
如果您只想要一个简单的答案,您可以将对象哈希组合成一个新结构(元组、匿名 class 等),然后对结果调用 GetHashCode()
。
例如
public override int GetHashCode() {
return new { MyField1, MyField2 }.GetHashCode();
}
详细说明上面链接的答案,如果你想让它更容易(?),你当然可以创建一个通用的静态助手 class 来为你完成工作:
public class MyHashCode
{
public static int Hash(params object[] values)
=> CustomHash(1009, 9176, values.Select(v => v.GetHashCode()).ToArray());
// From answer
public static int CustomHash(int seed, int factor, params int[] vals)
{
int hash = seed;
foreach (int i in vals)
{
hash = (hash * factor) + i;
}
return hash;
}
}
并这样称呼它:
public class UnitTest1
{
[Fact]
public void Test1()
{
string s1 = "yezz";
string s2 = "nope";
var hash = Utils.MyHashCode.Hash(s1, s2);
}
}