将函数代码转换为字符串

时间:2014-03-22 00:59:45

标签: .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 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))

2 个答案:

答案 0 :(得分:3)

  

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

不,不是真的。

虽然功能可以被反编译" - 例如在dotPeek和ILSpy等工具中完成,这些工具允许查看" [反编译]源" - 编译时,原始函数源不可逆转换CIL。 (虽然可以进行反编译,但它不是"标准"或者"平凡"将CIL转换回VB.NET / C#源,结果代码通常与原始源文本相同。)

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

答案 1 :(得分:3)

这是不可能的,因为编译的方法不是作为字符串值存储而是作为IL存储。所有语言都编译为IL,它是.Net程序的通用表示。如果这是你想要的那样,可以通过反射来检索这个IL

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

将此转换回文本形式并不是一件简单的事情。它需要识别模式才能将try / finally更改为using,依此类推。