使用typeof作为我的泛型类型参数

时间:2016-04-28 05:21:04

标签: c# linq generics reflection lambda

我有这段代码:

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中的每个对象执行该列表中的每个对象。

我做错了什么?

2 个答案:

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