.net 将函数代码转换为字符串

.net 将函数代码转换为字符串,.net,vb.net,.net,Vb.net,我试图将函数中的代码转换为字符串。在VB.Net或C#.Net中有什么方法可以做到这一点吗?例如: Public Function Test() As String Dim timestr As String = Now().ToString() Return timestr End Function 然后以某种方式将上述内容转换为字符串,即 Dim funcstr As String = Test.ToString() 哪个funcstr将等于“Dim timestr As

我试图将函数中的代码转换为字符串。在VB.Net或C#.Net中有什么方法可以做到这一点吗?例如:

Public Function Test() As String
    Dim timestr As String = Now().ToString()
    Return timestr
End Function
然后以某种方式将上述内容转换为字符串,即

Dim funcstr As String = Test.ToString()
哪个funcstr将等于“Dim timestr As String=Now().ToString()返回timestr”

谢谢

编辑

我标记了JaredPar的答案,因为它帮助解决了我的问题,即使我所问的是不可能的。我的目的是要有一个非常敏感和复杂的代码的副本,当类被实例化时,比较两者并确保它们是准确的,以防我在编码过程中意外地更改了一个字符(人为错误)。他的解决方案使我能够完成这项任务。这是我从Jared的解决方案中更新的代码。谢谢

    Dim _type As Type = Me.GetType

    Dim _method As System.Reflection.MethodInfo = _type.GetMethod("Test")
    Dim _bytes() As Byte = _method.GetMethodBody.GetILAsByteArray()

    Dim _method2 As System.Reflection.MethodInfo = _type.GetMethod("Test2")
    Dim _bytes2() As Byte = _method2.GetMethodBody.GetILAsByteArray()

    MsgBox(_bytes.SequenceEqual(_bytes2))
有没有办法[获取函数的源代码]

不,不是真的

虽然一个函数可以“反编译”——比如在dotPeek和ILSpy等工具中完成,这些工具允许查看“[decompiled]source”——但原始函数源在编译时会不可逆转地转换为。(虽然反编译是可能的,但将CIL转换回VB.NET/C#源代码并不是“标准”或“琐碎”的,生成的代码通常与原始源代码不完全相同。)

但现在我们来看Y问题:将函数转换为字符串表示的目标是什么

有没有办法[获取函数的源代码]

不,不是真的

虽然一个函数可以“反编译”——比如在dotPeek和ILSpy等工具中完成,这些工具允许查看“[decompiled]source”——但原始函数源在编译时会不可逆转地转换为。(虽然反编译是可能的,但将CIL转换回VB.NET/C#源代码并不是“标准”或“琐碎”的,生成的代码通常与原始源代码不完全相同。)


但是现在是Y问题:将函数转换为字符串表示的目标是什么?

这是不可能的,因为编译后的方法不是存储为字符串值,而是存储为IL。所有语言都编译成IL,它是.Net程序的通用表示形式。如果这是您想要的,则可以通过反射检索此IL

Dim type = TypeOf(TestContainer)
Dim method = type.GetMethod("Test")
Dim il = method.MethodBody.GetILAsByteArray();

但将其转换回文本形式并不是一件简单的事情。它需要识别模式,以便使用将
try/finally
更改为
,以此类推

这是不可能的,因为编译后的方法不是存储为字符串值,而是存储为IL。所有语言都编译成IL,它是.Net程序的通用表示形式。如果这是您想要的,则可以通过反射检索此IL

Dim type = TypeOf(TestContainer)
Dim method = type.GetMethod("Test")
Dim il = method.MethodBody.GetILAsByteArray();

但将其转换回文本形式并不是一件简单的事情。它需要识别模式,以便使用
try/finally
更改为
,以此类推

有一个非常敏感代码的副本,我可以在出现人为错误的情况下对类实例化执行比较,例如,我不小心更改了1个数字。谢谢@这听起来更像是一个开发工具或过程的工作——即文件散列、版本控制(可能带有提交挂钩)和审查/验收过程。另外,确保进行了适当的单元测试。不幸的是,没有办法从标准编程中消除“人为错误”,只是为了减轻它。为了有一个非常敏感的代码的副本,我可以在发生人为错误的情况下对类实例化执行比较,例如,我不小心更改了1个数字。谢谢@这听起来更像是一个开发工具或过程的工作——即文件散列、版本控制(可能带有提交挂钩)和审查/验收过程。另外,确保进行了适当的单元测试。不幸的是,没有办法从标准编程中消除“人为错误”,只能减轻它。