2012-10-14 2 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

Вам не нужны лямбда (x => x.MethodA и т. Д.). Это просто путает проблему (и скрывает интересующий метод: бит MethodA будет скрыт от вашего метода GetMethodName).

Вместо этого вы можете использовать отражение, чтобы получить объект MethodInfo, который затем имеет свойство Name.

Например:

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

Здесь methodName будет строка "SomeMethod". (Конечно, в этом простом случае мы использовали имя класса для получения объекта MethodInfo, поэтому оно несколько круговое, и мы могли бы просто использовать строчную кодировку "SomeMethod")!

+0

Это не сработает я, поэтому я сказал, что мне нужно это, используя выражение лямбда. Отражение с помощью строк не работает после обфускации, поскольку имена методов меняются, например, с «MethodA» на «ASNDKAMSDKMASD». Если я использую его, как в моем примере, то когда имя метода переименовывается, отражение не прерывается. Вот почему я должен быть в состоянии сделать это, используя то, как я просил. –

+0

Хорошо, я не понимал, что можно получить целевой метод из выражения лямбда, но, похоже, это так. См. Возможный дублирующий вопрос, который я связал в своем комментарии выше. –

+0

Спасибо, я думаю, что решит мою проблему! –

Смежные вопросы