如何获取Func <T>方法参数的名称?

时间:2019-07-09 16:16:59

标签: c# .net-core

请考虑以下代码。它具有foo方法,该方法采用Func。该方法将打印出传入参数的名称。由于呼叫为() => Hello1(),因此我希望funcParam.Method.Name为Hello1,但事实并非如此。对于对foo的4个调用,我得到以下信息:

<Main>b__0_0
<Main>b__0_1
<Main>b__0_2
<Main>b__0_3

我的问题如下:

  1. b__0_x是什么意思?编译器实际上为这些功能编号吗?
  2. 我每次运行应用程序时都可以指望funcParam.Method.Name的措词(例如b__0_ *)是相同的吗?
  3. 有没有办法获取实际传入的方法的名称(例如,Hello1,Hello2等)?

代码:

class Program {
    static void Main(string[] args) {
        foo(() => Hello1());
        foo(() => Hello2());
        foo(() => Hello3());
        foo(() => Hello4());
    }

    public static T foo<T>(Func<T> funcParam) where T : class {
        Console.WriteLine(funcParam.Method.Name);
        return funcParam();
    }
    private static Person Hello1() { return new Person(); }
    private static Person Hello2() { return new Person(); }
    private static Person Hello3() { return new Person(); }
    private static Person Hello4() { return new Person(); }

}

public class Person {
    public string Name { get; set; }
}

0 个答案:

没有答案