通过当前方法的参数进行迭代



嘿,伙计们,我需要能够遍历当前函数/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能够实现这一点,但与我交谈过的人都无法给我一个有效的实现或如何实现的明确解释。

附加信息:

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

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

一种可能性是更改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

您可以尝试System.Reflection.MethodBase.GetCurrentMethod,然后使用返回的方法GetParameters函数。

话虽如此,对于这是否真的会起作用,仍有一些困惑/分歧,但如果没有其他原因,除了消除这种可能性,这可能值得一试。

相关内容

  • 没有找到相关文章

最新更新