Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GetHashCode调试和单元测试运行时的不同结果_C#_.net_Gethashcode - Fatal编程技术网

C# GetHashCode调试和单元测试运行时的不同结果

C# GetHashCode调试和单元测试运行时的不同结果,c#,.net,gethashcode,C#,.net,Gethashcode,今天我想用C#测试我的关键程序。在这个程序中,一些属性将通过GetHashCode()方法散列。 在实现了部分程序后,增加了单元测试项目。 然后,我在调试模式下运行程序,并将散列数据复制到记事本,以便在单元测试项目上进行比较。 之后,在调试模式下运行测试方法,再次获取散列数据并将其复制到记事本。 在本例中,我看到唯一字符串的哈希代码在调试模式和单元测试模式下不相同 我不知道它在哪里提出的,以及如何解决这个问题 这是一个问题吗?MSDN上的此文件包含一个明确的警告,提示您不应保留字符串的哈希代码。

今天我想用C#测试我的关键程序。在这个程序中,一些属性将通过
GetHashCode()
方法散列。 在实现了部分程序后,增加了单元测试项目。 然后,我在调试模式下运行程序,并将散列数据复制到记事本,以便在单元测试项目上进行比较。 之后,在调试模式下运行测试方法,再次获取散列数据并将其复制到记事本。 在本例中,我看到唯一字符串的哈希代码在调试模式和单元测试模式下不相同

我不知道它在哪里提出的,以及如何解决这个问题

这是一个问题吗?

MSDN上的此文件包含一个明确的警告,提示您不应保留字符串的哈希代码。不能保证相同的字符串值将映射到应用程序域之外的相同哈希代码

如果两个字符串对象相等,则GetHashCode方法返回 相同的值。但是,没有唯一的哈希代码值 每个字符串的值都是唯一的。不同的字符串可以返回相同的哈希值 代码

哈希代码本身不能保证是稳定的。的哈希代码 相同的字符串在.NET Framework和 跨平台(如32位和64位),用于单个版本的 NET框架。在某些情况下,它们甚至可能因应用而有所不同 域名

因此,哈希代码不应在外部使用 它们是在其中创建的应用程序域中创建的,它们永远不应该 用作集合中的键字段,并且它们不应 坚持

最后,不要使用哈希代码而不是由 加密哈希函数,如果您需要加密功能强大的 搞砸对于加密哈希,请使用从 System.Security.Cryptography.HashAlgorithm或 System.Security.Cryptography.KeyedHashAlgorithm类

有关哈希代码的更多信息,请参阅Object.GetHashCode

因此,对于您的测试,我要么依赖String的GetHashCode实现是否正确,要么创建并注入一个可模拟的哈希代码提供程序,该提供程序返回String.GetHashCode作为普通代码,并在运行测试时被模拟代码替代。“hash code provider”指的是一个抽象类或接口,该类或接口具有一个为给定字符串返回哈希代码的方法,例如:

internal interface IHashCodeProvider
{
    int ProvideHashCode(string stringValue);
}
更轻量级的方法是注入一个返回has代码的函数,例如:
Func
。默认函数为
x=>x。GetHashCode()

MSDN上的此函数包含一个明确的警告,提示您不应保留字符串的哈希代码。不能保证相同的字符串值将映射到应用程序域之外的相同哈希代码

如果两个字符串对象相等,则GetHashCode方法返回 相同的值。但是,没有唯一的哈希代码值 每个字符串的值都是唯一的。不同的字符串可以返回相同的哈希值 代码

哈希代码本身不能保证是稳定的。的哈希代码 相同的字符串在.NET Framework和 跨平台(如32位和64位),用于单个版本的 NET框架。在某些情况下,它们甚至可能因应用而有所不同 域名

因此,哈希代码不应在外部使用 它们是在其中创建的应用程序域中创建的,它们永远不应该 用作集合中的键字段,并且它们不应 坚持

最后,不要使用哈希代码而不是由 加密哈希函数,如果您需要加密功能强大的 搞砸对于加密哈希,请使用从 System.Security.Cryptography.HashAlgorithm或 System.Security.Cryptography.KeyedHashAlgorithm类

有关哈希代码的更多信息,请参阅Object.GetHashCode

因此,对于您的测试,我要么依赖String的GetHashCode实现是否正确,要么创建并注入一个可模拟的哈希代码提供程序,该提供程序返回String.GetHashCode作为普通代码,并在运行测试时被模拟代码替代。“hash code provider”指的是一个抽象类或接口,该类或接口具有一个为给定字符串返回哈希代码的方法,例如:

internal interface IHashCodeProvider
{
    int ProvideHashCode(string stringValue);
}
更轻量级的方法是注入一个返回has代码的函数,例如:
Func
。默认函数是
x=>x.GetHashCode()