【问题标题】:Specifying generic collection type param at runtime [duplicate]在运行时指定通用集合类型参数
【发布时间】:2009-02-05 00:05:29
【问题描述】:

我有:

class Car {..}
class Other{
  List<T> GetAll(){..}
}

我想做:

Type t = typeof(Car);
List<t> Cars = GetAll<t>();

我该怎么做?

我想从数据库中返回一个泛型集合,该集合是我在运行时使用反射发现的。

【问题讨论】:

    标签: c# generics casting runtime


    【解决方案1】:
    Type generic = typeof(List<>);    
    Type specific = generic.MakeGenericType(typeof(int));    
    ConstructorInfo ci = specific.GetConstructor(Type.EmptyTypes);    
    object o = ci.Invoke(new object[] { });
    

    【讨论】:

    • 这没什么大不了的,但是您可以用 Type.EmptyTypes 替换传递给 GetConstructor 的空类型数组。只是稍微清洁一点,仅此而已。
    【解决方案2】:

    您可以为此使用反射:

    Type t = typeof(Car);
    System.Type genericType= generic.MakeGenericType(new System.Type[] { t});
    Activator.CreateInstance(genericType, args);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 2013-10-04
      • 2016-06-23
      • 2013-05-08
      • 2012-12-25
      • 2014-01-30
      • 2023-03-14
      相关资源
      最近更新 更多