Ответ 1
Основываясь на
Кажется, есть атрибут в скомпилированной форме. Посмотрите, есть ли у метода этот атрибут:
http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.extensionattribute.aspx
В рамках моего приложения у меня есть функция, которая получает MethodInfo и должна выполнять определенные операции над ней, в зависимости от того, является ли этот метод "Метод расширения".
Я проверил класс MethodInfo, и я не смог найти какое-либо свойство IsExtension или флаг, который показывает, что метод является расширением.
Кто-нибудь знает, как я могу найти это из метода MethodInfo?
Основываясь на
Кажется, есть атрибут в скомпилированной форме. Посмотрите, есть ли у метода этот атрибут:
http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.extensionattribute.aspx
Вы можете вызвать метод IsDefined в экземпляре MethodInfo, чтобы узнать это, проверив, применяется ли ExtensionAttribute к методу:
bool isExtension=someMethod.IsDefined(typeof(ExtensionAttribute),true);
Это выглядит очень похоже на предыдущий question, возможно, стоит посмотреть. Предложение было искать классы и методы с ExtensionAttribute, который звучит так, как вы после.
Если вы знаете, что вы получаете MethodInfo
из экземпляра, вы можете легко проверить, является ли метод статическим. Методы расширения - это просто синтаксический сахар и преобразовываются в передачу статических вызовов методов в экземпляре.
Не компилятор переключает все методы расширения в вызовы статических методов во время компиляции?
myList.First();
становится
Enumerable.First(myList);
Если это так, тогда нет методов расширения в среде выполнения .net(где вы отражаете).