【问题标题】:How do I store a List/Array/ any collection of types. Or type names so they can be passed as a type to a function如何存储列表/数组/任何类型的集合。或键入名称,以便它们可以作为类型传递给函数
【发布时间】:2014-06-11 21:19:55
【问题描述】:

例如:

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

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

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

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

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

【问题讨论】:

  • 你需要使用反射。

标签: c# generics collections


【解决方案1】:

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

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


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

【讨论】:

    【解决方案2】:

    你不能像这样混合泛型和类型实例。相反,您必须拥有类似以下内容或使用一些反射技术

    Public void MyMethodToTest(Type t){}
    

    【讨论】:

      【解决方案3】:
      public Foo: ICoolThing {}
      public Bar: ICoolThing{}
      
      MyMethodToTest<Foo>();
      MyMmethodToTest<Bar>();
      
      public void MyMethodToTest(ICoolThing target)
      

      能不能用一个接口来定义通用功能,通过接口传递

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-03
        • 1970-01-01
        • 2015-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多