从数组或列表中的dll获取所有方法

时间:2013-10-13 18:26:04

标签: c#

我使用反射来获取使用自定义属性修饰的特定dll中的所有方法。但是,我无法在arraylist或列表中获取所有这些方法,就像这样"无法转换为' string'到' System.Collections.ICollection'"。

守则如下

public static void Main(string[] args)
{
 var methods = type.GetMethods(BindingFlags.Public);
               foreach (var method in type.GetMethods())
                 {
                var attributes = method.GetCustomAttributes(typeof(model.Class1), true);
                                if (attributes.Length != 0)
                                {

                                    for(int i=0;i<attributes.Length; i++)
                                    {
                                       ArrayList res = new ArrayList();
                                       res.AddRange(method.Name);
                                       listBox1.DataSource = res;
 }                                   }
}
}

2 个答案:

答案 0 :(得分:2)

你现在的代码到处都是,我很害怕。

  • 您绑定了一个新列表,每个方法中的每个属性都有一个条目,而不是收集所有方法名称,然后绑定一次
  • 您使用单个值
  • 呼叫AddRange
  • 您的methods变量完全未使用,无论如何它都是空的,因为您既没有指定InstanceStatic绑定标记

我建议使用LINQ和MemberInfo.IsDefined,绝对避免使用ArrayList。 (2004年非通用集合......)

var methods = type.GetMethods()
                  .Where(method => method.IsDefined(typeof(model.Class1), false)
                  .Select(method => method.Name)
                  .ToList();
listBox1.DataSource = methods;

我还建议将属性名称从model.Class1更改为遵循.NET命名约定的内容,并指明属性的含义......

答案 1 :(得分:1)

创建通用列表而不是数组来存储方法名称。