我有这段代码:
foreach (var item in allClassesINeedList)
{
var genericMethod = temp.GetType().GetMethod("GenerateDocument").MakeGenericMethod(typeof(item));
genericMethod.Invoke(temp, new object[] { item });
}
这会引发错误:
“无法找到类型或命名空间名称'项'(您是否遗漏了 using指令或程序集引用?)“
我的目标是为allClassesINeedList
(一个List<object>
)我的通用方法GenerateSingleDocument
中的每个对象执行该列表中的每个对象。
我做错了什么?
答案 0 :(得分:3)
您可以将typeof(item)
替换为item.GetType()
答案 1 :(得分:1)
你需要使用反射吗?如果您可以控制正在迭代的类,那么最好创建一个接口。反思很慢,应该尽可能避免。
public interface IDocumentCreator
{
void GenerateDocument();
}
将此界面添加到您的课程中:
public class YourClass : IDocumentCreator
{
// ...
public void GenerateDocument()
{
// ...
}
}
然后制作List<IDocumentCreator>
而不是List<object>
。然后,您可以按正常方式调用该方法:
List<IDocumentCreator> allClassesINeedList = ...
foreach(IDocumentCreator item in allClassesINeedList)
{
item.GenerateDocument();
}