2012-10-14 46 views
0

可能重複:
get methodinfo from a method reference C#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); 

我怎麼可以這樣做到底是什麼?

謝謝!

回答

1

你不需要lambdas(x => x.MethodA等)。這只是混淆了問題(並且隱藏了感興趣的方法:MethodA位將從您的GetMethodName方法中隱藏)。

相反,您可以使用反射來獲取MethodInfo對象,然後該對象具有Name屬性。

例如:

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

這裏methodName將字符串"SomeMethod"。 (當然,在這種簡單的情況下,我們已經使用類名來獲取MethodInfo對象,所以它有點圓形,我們不妨使用硬編碼的"SomeMethod"字符串!)

+0

這不適用於我,這就是爲什麼我說我需要使用lambda表達式。例如,當方法名稱從「MethodA」變爲「ASNDKAMSDKMASD」時,使用字符串進行反射一旦混淆就不起作用。如果我像我的例子那樣使用它,那麼當方法名稱被重命名時,反射不會中斷。這就是爲什麼我必須能夠按照我所要求的方式來做到這一點。 –

+0

好吧,我沒有意識到有可能從lambda表達式中檢索目標方法,但看起來是這樣。在上面的評論中查看我已經鏈接到的可能的重複問題。 –

+0

謝謝,我認爲這將解決我的問題! –