使用reflection查找具有自定义属性的方法

我有一个自定义属性:

public class MenuItemAttribute : Attribute { } 

和一个有几个方法的类:

 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(); } } } 

我现在需要的是获取方法名称,返回types以及它接受的参数。

你的代码是完全错误的。
您正在遍历每个具有该属性的types ,而不会find任何types。

您需要遍历每种types的每种方法,并检查它是否具有您的属性。

例如:

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