如何存储列表/数组/任何类型的集合.或者键入名称,以便将它们作为类型传递给函数

本文关键字:类型 函数 存储 何存储 列表 数组 或者 集合 任何 | 更新日期: 2023-09-27 18:08:08

例如:

var types = new List<Type>();
types.Add(OneObject);
types.Add(TwoObject);
foreach(var type in types)
{
MyMethodToTest<type>();
}

如果我这样称呼它,这个方法就会起作用:

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

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

如何存储列表/数组/任何类型的集合.或者键入名称,以便将它们作为类型传递给函数

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

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

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

不能像那样混合泛型和类型实例。相反,你必须有如下的东西,或者使用一些反射技术

Public void MyMethodToTest(Type t){}
public Foo: ICoolThing {}
public Bar: ICoolThing{}
MyMethodToTest<Foo>();
MyMmethodToTest<Bar>();
public void MyMethodToTest(ICoolThing target)

您是否可以使用接口定义通用功能并通过接口