0

我正在使用反射从使用自定义属性装饰的特定 dll 中获取所有方法。但是我无法在数组列表或列表中获取所有这些方法,因为它说这样“无法从'字符串'转换为'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;
 }                                   }
}
}
4

2 回答 2

2

恐怕您当前的代码到处都是。

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

我建议为此使用 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 命名约定并指示属性含义的名称...

于 2013-10-13T18:32:21.043 回答
1

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

于 2013-10-13T18:29:25.737 回答