嘿伙计我需要能够一般地遍历当前函数/ sub的所有参数(用于记录),例如:
Public sub SampleHandler(ByVal Sender as Object, ByVal e as EventArgs)
Dim argholder as List(of Object)
For each arg in getcurrentargs() '<-------- That thing
argholder.add(arg)
Next
Log(argholder)
'Continue doing method things
End Sub
有什么想法?我一直试图通过Emit(我没有完全掌握)和StackTrace来提取它们,但到目前为止无济于事。多个消息来源告诉我,MSIL能够做到这一点,但我所谈过的没有人可以给我一个有效的实现或明确解释如何。
其他信息:
我需要能够迭代函数的所有参数并将它们的值添加到列表中。这是通过提取名称然后可以利用它们来获取值的某种方法,或者只是某种可以引用它们的通用标识符,无论哪种方式都可以,但它必须是程序化的和静态代码块。 / p>
意图是在任何非敏感函数中(我正在为这个项目使用的代码有几百个),我希望能够放入对这个代码块的内联引用(想出了用于获取函数名称(完成),模块/类(已完成),运行(完成),结果(如果是函数;完成),当前err_level是什么(完成)以及什么的方法值作为参数传递(在我知道模块/类的逻辑上,函数名称,我可以根据需要匹配值),这样我就可以转向并记录它们。 “敏感”功能,我必须以不同的方式处理,以便我不会记录p / w和u / n或类似的东西;但那些都是照顾的。
答案 0 :(得分:1)
一种可能性是更改Log()例程以使用paramarray ......
Sub Log(ParamArray o() As Object)
For i As Integer = 0 To o.GetUpperBound(0)
'...do stuff....
Next
End Sub
然后在调用时添加每个参数...
Public sub SampleHandler(ByVal Sender as Object, ByVal e as EventArgs)
Call Log(Sender, e)
'Continue doing method things
End Sub
答案 1 :(得分:0)
您可以尝试System.Reflection.MethodBase.GetCurrentMethod,然后使用返回的方法GetParameters函数。
话虽如此,is some confusion/disagreement关于这是否真的有效,但如果没有其他原因可以尝试将其作为一种可能性消除,那么值得一试。