您可以在没有魔术字符串的情况下从静态类的静态方法中获取 MethodInfo 吗?

osc*_*tin 1 .net reflection lambda expression

假设我有一个带有静态方法的静态类:

public static class MyClass
{
    public static void MyMethod() { }
}
Run Code Online (Sandbox Code Playgroud)

我可以得到MethodInfo这样的:

MethodInfo MethodInfo = typeof(MyClass).GetMethod("MyMethod");

但是,如果我更改了方法的名称,字符串的神奇属性将导致方法名称保持不变。如果它是非静态类/方法,我可以这样做:

public class MyClass
{
    public void MyMethod() { }
}
Run Code Online (Sandbox Code Playgroud)

MethodInfo MethodInfo = new Action<MyClass>(x => x.MyMethod()).Method;

这很棒,因为它是对方法签名本身的引用,因此我可以更改原始方法名称,然后重命名所有引用。但是,此方法不适用于我的类/方法的静态版本。

有没有办法将 lambda 与静态类一起使用?

das*_*ght 5

从 C# 6.0 开始,您可以使用nameof运算符来实现此目的:

MethodInfo MethodInfo = typeof(MyClass).GetMethod(nameof(MyClass.MyMethod));
Run Code Online (Sandbox Code Playgroud)