通常我会这样做:
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帖子不同。
谢谢。
答案 0 :(得分:1)
您可以使用反射。试试这个:
var genericMethod = temp.GetType().GetMethod("GeneratesSingleDocument").MakeGenericMethod(typeof(item));
genericMethod.Invoke(temp, new object[] { item });
请注意,反射会伴随性能和代码维护问题 - here's a good link供您阅读。祝你好运。