1

嘿伙计们,我需要能够通用地遍历当前函数/子(用于日志记录)的所有参数,例如:

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 将能够完成此任务,但与我交谈过的任何人都无法给我一个有效的实现或对 HOW 的清晰解释。

附加信息:

我需要能够遍历函数的所有参数并将它们的值添加到列表中。无论是通过某种方法提取名称然后可以利用它们来获取值,还是只是某种可以引用它们的通用标识符,任何一种方式都可以,但它必须是程序化的和静态代码块。

目的是在任何非敏感函数(我正在为这个项目使用的代码有几百个)中,我希望能够插入对这个代码块的内联引用(找出那个方法) 来捕获函数的名称 (done)、它的模块/类 (done)、运行时间 (done)、结果 (如果是函数;done)、当前的 err_level 是什么 (done) 以及正在使用什么值作为参数传入(根据我知道模块/类和函数名称的逻辑,我可以在必要时匹配这些值),以便我可以转身并记录它们。“敏感”功能,我必须以不同的方式处理,这样我就不会注销 p/w 和 u/n 或类似的东西;但这些都得到了照顾。

4

2 回答 2

1

一种可能性是更改您的 Log() 例程以使用参数数组...

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
于 2012-07-16T02:41:46.107 回答
0

You could try System.Reflection.MethodBase.GetCurrentMethod and then use the returned methods GetParameters function.

Having said that, there is some confusion/disagreement as to whether or not this will actually work, but it is probably worth a try if for no other reason than to eliminate it as a possibility.

于 2012-07-16T01:43:52.013 回答