我使用反射来获取使用自定义属性修饰的特定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;
} }
}
}
答案 0 :(得分: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命名约定的内容,并指明属性的含义......
答案 1 :(得分:1)
创建通用列表而不是数组来存储方法名称。