【问题标题】:C# use reflection to get method name [duplicate]C#使用反射获取方法名称[重复]
【发布时间】:2012-10-04 10:50:13
【问题描述】:

可能重复:
get methodinfo from a method reference C#

这很可能是一些简单的事情,但到目前为止我还没有想出如何做到这一点。

我希望能够以两种不同的方式获取方法的名称。请注意,我想要的是方法名,而不是属性名。

1) 在像ClassA<T> 这样的类内部,看起来像:

var name = GetMethodName(x => x.MethodA);

2) 在类之外,看起来像:

var name = GetMethodName<ClassA<object>>(x => x.MethodA);
var name = GetMethodName<ClassB>(x => x.MethodB);

我该怎么做呢?

谢谢!

【问题讨论】:

    标签: c#-4.0 dynamic reflection methods


    【解决方案1】:

    您不需要 lambda(x =&gt; x.MethodA 等)。这只是混淆了问题(并隐藏了感兴趣的方法:MethodA 位将从您的 GetMethodName 方法中隐藏)。

    相反,您可以使用反射来获取MethodInfo 对象,然后该对象具有Name 属性。

    例如:

    MethodInfo sm = typeof(SomeClass).GetMethod("SomeMethod");
    string methodName = sm.Name;
    

    这里的methodName 将是字符串"SomeMethod"。 (当然,在这个简单的例子中,我们使用类名来获取MethodInfo 对象,所以它有点循环,我们还不如直接使用硬编码的"SomeMethod" 字符串!)

    【讨论】:

    • 这对我不起作用,这就是为什么我说我需要使用 lambda 表达式。例如,当方法名称从“MethodA”更改为“ASNDKAMSDKMASD”时,使用字符串的反射一旦被混淆就不起作用。如果我像我的示例一样使用它,那么当重命名方法名称时,反射不会中断。这就是为什么我必须能够按照我要求的方式做到这一点。
    • 好吧,我没有意识到可以从 lambda 表达式中检索目标方法,但看起来确实如此。请参阅我在上面的评论中链接到的可能重复的问题。
    • 谢谢,我想这会解决我的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    相关资源
    最近更新 更多