如何获取方法范围中声明的所有变量

时间:2015-09-17 08:12:06

标签: c# variables methods reflection parameters

有没有办法在方法和参数中声明所有变量?

我试图在我想要添加到日志的方法中获取所有变量及其值。 我可以使用MethodBase.GetCurrentMethod().GetParameters()获取方法定义中收到的参数。 这也有一个缺点,我注意到,我必须明确传递特定于方法的东西,以获取参数的值。

我想要的是,我希望以一般方式在方法范围中声明所有变量及其值,而不显式提供任何特定于方法的参数(因为我想为多个方法添加相同的逻辑)。 请有任何想法。

提前致谢。

1 个答案:

答案 0 :(得分:1)

你想要达到的目标是不可能的。首先,如果要记录变量在方法中接收的值 all ,请考虑以下代码:

void SomeMethod()
{
  int n = 0;
  for (;;)
    n++;
}

你必须创建一个无限长的日志,这是不可能的。

其次,如果您只想知道变量初始值而不给参数值,请考虑以下事项:

void SomeMethod(int m)
{
  int n = m == 0 ? 1 : 2;
  ...
}

在不知道m的价值的情况下,您根本无法知道n的价值。

第三,即使您拥有所有参数值,并且您只想知道变量的初始值,仍然不可能,一般。实际上,你甚至不知道变量是否会被声明。请考虑以下事项:

void SomeMethod(...some parameters...)
{
  ...some complex code...
      int n = 0;  // deep inside some complex control statements
  ...more complex code...
}

您不能,一般,知道int n = 0;是否会被执行,因此您无法知道是否会声明变量n。这是the halting problem的一种形式。