Найти методы, которые имеют настраиваемый атрибут с использованием отражения

У меня есть пользовательский атрибут:

public class MenuItemAttribute : Attribute { } 

и class с несколькими методами:

 public class HelloWorld { [MenuItemAttribute] public void Shout() { } [MenuItemAttribute] public void Cry() { } public void RunLikeHell() { } } 

Как я могу получить только те методы, которые украшены пользовательским атрибутом?

Пока у меня есть это:

 string assemblyName = fileInfo.FullName; byte[] assemblyBytes = File.ReadAllBytes(assemblyName); Assembly assembly = Assembly.Load(assemblyBytes); foreach (Type type in assembly.GetTypes()) { System.Attribute[] attributes = System.Attribute.GetCustomAttributes(type); foreach (Attribute attribute in attributes) { if (attribute is MenuItemAttribute) { //Get me the method info //MethodInfo[] methods = attribute.GetType().GetMethods(); } } } 

Теперь мне нужно получить имя метода, тип возврата, а также параметры, которые он принимает.

Ваш код полностью ошибочен.
Вы перебираете все типы , у которых есть атрибут, который не найдет никаких типов.

Вам нужно прокручивать каждый метод на каждом типе и проверять, имеет ли он свой атрибут.

Например:

 var methods = assembly.GetTypes() .SelectMany(t => t.GetMethods()) .Where(m => m.GetCustomAttributes(typeof(MenuItemAttribute), false).Length > 0) .ToArray(); 
 Dictionary methods = assembly .GetTypes() .SelectMany(x => x.GetMethods()) .Where(y => y.GetCustomAttributes().OfType().Any()) .ToDictionary(z => z.Name); 
Interesting Posts

Как перенести приложение на фронт каждые 15 минут на Mac OS X Lion?

Использование инъекции зависимостей без какой-либо библиотеки DI

В чем разница между областью действия: {} и scope: true внутри директивы?

Почему запись в строковый литерал в этой программе C segfault?

Как я могу сказать Windows или Linux поставить конкретное (PCI ) устройство в режим сна / выключения (D3)?

Выполнение действия после анимации транзакции fragmentа завершено

Как создать документ Word с помощью Apache POI?

Как подключиться к серверу FTPS с подключением к данным, используя тот же сеанс TLS?

Упорядочить значки рабочего стола в Windows по категориям или разделам

Как я могу поделиться Wi-Fi-соединением ноутбука через его порт Ethernet?

Пересылка портов pfctl в Mac OSX?

Форматирование удваивается для вывода в C #

SkyDrive на Windows 8.1

Как сделать внешний жесткий диск постоянным и постоянным?

Inkscape – закругленные углы фигур?

Давайте будем гением компьютера.