如何查找函数参数

发布于 2024-08-12 04:06:16 字数 90 浏览 7 评论 0原文

我需要记录十几个函数中的所有函数参数。

有没有一种方法可以通过编程来确定所有参数及其值(或至少确定它们的 .ToString() 值)?也许通过反思?

I need to log all the function parameters in a dozen functions.

Is there a way to pro grammatically determine all the parameters and their values (or at least their .ToString() value)? Perhaps via reflection?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

天暗了我发光 2024-08-19 04:06:16

据我所知,无法使用反射来动态列出和确定局部变量的值。您可以使用反射来获取有关方法参数的类型信息,但仅限于声明类型 - 您无法自动获取有关实际参数的信息,因为反射元数据提供有关方法定义的信息,而不是运行时传递给它的特定值。

但是,您可以执行以下操作:

static class Extensions
{
    public static string GetTypeAndValue(this object obj) 
    { 
        return String.Format("{0}: {1}", obj.GetType().Name, obj.ToString()); 
    }
}

然后,在要执行日志记录的每个方法中,执行类似的操作

private void SomeMethodToBeLogged(string some_string, int some_int, bool some_bool)
{
    Logger.Log(String.Format("SomeMethodToBeLogged({0}, {1}, {2})", 
        some_string.GetTypeAndValue(), 
        some_int.GetTypeAndValue(), 
        some_bool.GetTypeAndValue()));
}

To the best of my knowledge there's no way to use reflection to dynamically list and determine value of local variables. You can use reflection to get type information about the parameters of a method, but only the declared type - you can't automatically get information about the actual arguments, because the reflection metadata gives information about the method definition, not the specific values passed to it at runtime.

You can, however, do something like this:

static class Extensions
{
    public static string GetTypeAndValue(this object obj) 
    { 
        return String.Format("{0}: {1}", obj.GetType().Name, obj.ToString()); 
    }
}

Then, from within each method in which you want to perform logging, do something like

private void SomeMethodToBeLogged(string some_string, int some_int, bool some_bool)
{
    Logger.Log(String.Format("SomeMethodToBeLogged({0}, {1}, {2})", 
        some_string.GetTypeAndValue(), 
        some_int.GetTypeAndValue(), 
        some_bool.GetTypeAndValue()));
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文