【问题标题】:Get class definition from type从类型获取类定义
【发布时间】:2014-07-16 22:45:05
【问题描述】:

我有一种情况,我希望能够将 Type 作为泛型参数传递。我的问题是,一旦我使用 typeof() 获取类型,我无法弄清楚如何将其恢复为允许我将其作为泛型参数传递的表单,即使类型仍然是一个类输入

下面纯粹是为了演示我的问题,我实际上并没有在已经被限制为类类型的东西上调用 typeof():

public void Example<T>() where T : class
{
  //This works fine.
  var firstList = new List<T>();

  Type aType = typeof(T);

  //This resolves to true.
  bool thisIsTrue = aType.IsClass;

  //This does not compile?!?
  var secondList = new List<aType>();
}

回答以下任何问题都可能解决我的问题:

-- 是否有类似于 typeof()、.GetType() 等的命令,可以让我将结果约束到一个类,以便编译器接受它作为泛型参数?这样我就可以完全避免从类型到类的问题了。

-- 真的有办法将类型转换为类吗?我找不到从该类型或所述类型的实例化对象中执行此操作的方法。

-- 作为最后的手段,我是否需要在运行时动态定义这些类才能真正让它工作?

【问题讨论】:

    标签: c# generics reflection


    【解决方案1】:

    你正在寻找MakeGenericType方法

    var secondListType = typeof(List<>).MakeGenericType(aType);
    var secondList = (List<T>)Activator.CreateInstance(secondListType);
    

    【讨论】:

    • 酷!我从来不知道 typeof(List) 语法。我打算提出MakeGenericType 方法,但这让生活更轻松。
    • 如果您使用 MakeGeneric 类型,您应该能够安全地将 secondList 转换为 IList(而不是 IList)以使其更易于使用。
    猜你喜欢
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多