Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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#)?_C#_Reflection - Fatal编程技术网

在运行时计算类代码的哈希(C#)?

在运行时计算类代码的哈希(C#)?,c#,reflection,C#,Reflection,是否可以在运行时用C#计算类的哈希值(可能是通过反射)?明确地说,我不想计算所述类的实例的哈希代码,我想计算类代码本身的哈希(如果类中的函数发生变化,我希望计算不同的哈希代码)。理想情况下,这只对目标代码中的更改(而不仅仅是代码本身的字符串表示的散列)敏感 提前感谢您的帮助 --布雷克您不需要使用反射。您可以尝试System.Type.GetHashCode()。我不确定它是如何工作的,如果不是最佳的,那么您可以始终使用type.FullName.GetHashCode()如果您有类型,您可以使

是否可以在运行时用C#计算类的哈希值(可能是通过反射)?明确地说,我不想计算所述类的实例的哈希代码,我想计算类代码本身的哈希(如果类中的函数发生变化,我希望计算不同的哈希代码)。理想情况下,这只对目标代码中的更改(而不仅仅是代码本身的字符串表示的散列)敏感

提前感谢您的帮助


--布雷克

您不需要使用反射。您可以尝试
System.Type.GetHashCode()
。我不确定它是如何工作的,如果不是最佳的,那么您可以始终使用
type.FullName.GetHashCode()

如果您有
类型
,您可以使用
GetMethod
来获取
MethodInfo
的实例,该实例又有一个返回所述方法的IL的实例。然后你可以把它散列出来


我很好奇。首先为什么要这样做?

Type.GetHashCode()似乎会在重新编译之间更改其值。type.FullName.GetHashCode()不会在方法更改时更改哈希值。System.type.GetHashCode会正常工作,如果方法名称更改或参数名称/类型更改等,它会更改。type.FullName.GetHashCode不会工作,因为类型名称可以保持不变,但方法可能会更改。@Jeff:class程序{static void Main(){Console.Write(typeof(Program).GetHashCode();}}在编译之间更改其输出。@Jimmy你说得对,我应该用同一个类运行两次测试,对不起……我之所以要这样做,是因为在我的例子中,我有一个相当复杂的函数f。问题是我正在试验f应该返回的值,所以f经常更改。如果某个特定的f,fi的rsion已经为输入x运行,我想缓存结果fi(x),这样如果fi再次运行,它就可以使用记忆值。在我的情况下,原因是我保存快照(记忆值)对于具有内部方法的POCO类。如果该类的某些内部方法被修改,我需要使该快照无效。我将尝试此操作,谢谢