【问题标题】:Can you get MethodInfo from a static method of a static class without a magic string?您可以从没有魔术字符串的静态类的静态方法中获取 MethodInfo 吗?
【发布时间】:2015-08-11 12:33:48
【问题描述】:

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

public static class MyClass
{
    public static void MyMethod() { }
}

我可以像这样得到MethodInfo

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

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

public class MyClass
{
    public void MyMethod() { }
}

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

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

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

【问题讨论】:

  • 您使用的是什么版本的 Visual Studio。 VS2015 (C# 6) 有一个新功能,专门针对这种情况。
  • @ScottChamberlain 2013/4.5.1。如果在升级之前我必须使用魔法字符串,我想我必须这样做。

标签: .net reflection lambda expression


【解决方案1】:

从 C# 6.0 开始,您可以为此使用 nameof operator

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

【讨论】:

  • 那真是太好了。我们很快就会升级到 2015,所以我必须找到一种方法来使用 4.5.1 或使用魔法字符串。
  • @oscilatingcretin 另外需要注意的是,您无需升级到 .NET 4.6 即可使用nameof。它适用于 4.5.2,因为它是一个编译器技巧。
猜你喜欢
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
相关资源
最近更新 更多