使用列表中的自定义对象调用泛型方法(自动)

时间:2016-04-27 14:51:52

标签: c# linq generics

通常我会这样做:

MyCustomDocument1 bla1=new MyCustomDocument1()
temp.GeneratesSingleDocument<MyCustomDocument1>(bla1);

MyCustomDocument2 bla2=new MyCustomDocument2()
temp.GeneratesSingleDocument<MyCustomDocument2>(bla2);

MyCustomDocument3 bla3=new MyCustomDocument3()
temp.GeneratesSingleDocument<MyCustomDocument3>(bla3);

但是这次我有一个列表(包含上面的所有类):

List<object> allObjects = new List<object>();

这样填充(我需要的所有物体):

allObjects.Add(new MyCustomDocument1());
allObjects.Add(new MyCustomDocument2());
allObjects.Add(new MyCustomDocument3());
allObjects.Add(new MyCustomDocument4());
allObjects.Add(new ...());

现在我想用我之前填充的列表``:

调用我的泛型方法
foreach (var item in allObjects)
{
    try
    {
         //instead of manually calling:
        //temp.GeneratesSingleDocument<MyCustomDocument1>(bla1);
        //do it generic
        temp.GeneratesSingleDocument<typeof(item)>(item);

    }
    catch (Exception e)
    {

        Debug.WriteLine(e.Message);
    }

}

这不起作用:

temp.GeneratesSingleDocument<typeof(item)>(item);

总体目标是进行一些自动化,否则我必须编写很多代码。

我认为这与this帖子不同。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用反射。试试这个:

var genericMethod = temp.GetType().GetMethod("GeneratesSingleDocument").MakeGenericMethod(typeof(item));
genericMethod.Invoke(temp, new object[] { item });

请注意,反射会伴随性能和代码维护问题 - here's a good link供您阅读。祝你好运。