如何存储List / Array /任何类型的集合。或者键入名称,以便它们可以作为类型传递给函数

时间:2014-06-11 21:19:55

标签: c# generics collections

例如:

var types = new List<Type>();
types.Add(OneObject);
types.Add(TwoObject);

foreach(var type in types)
{
MyMethodToTest<type>();
}

如果我这样调用它,该方法将起作用:

MyMethodToTest<OneObject>();
MyMethodToTest<TwoObject>();

我可以像上面那样做,但我很快会有很多类型,循环会更好

3 个答案:

答案 0 :(得分:4)

使用反射获取MyMethodToTest方法,然后使用MakeGenericMethod

var method = someType.GetMethod("MyMethodToTest");


foreach(var type in types)
{
   method.MakeGenericMethod(type).Invoke(null);
}

答案 1 :(得分:0)

您无法混合泛型和类似的实例。相反,你必须有类似下面的内容或使用一些反射技术

Public void MyMethodToTest(Type t){}

答案 2 :(得分:0)

public Foo: ICoolThing {}
public Bar: ICoolThing{}

MyMethodToTest<Foo>();
MyMmethodToTest<Bar>();

public void MyMethodToTest(ICoolThing target)

您是否可以使用界面来定义常用功能并通过界面