Type参数从类型参数设置

时间:2011-01-31 10:26:00

标签: c# type-parameter

如何将我的参数转换为正确的类型声明。 IE浏览器。如何在以下

中从type转到T
class Foo<T>
{  
  Foo<??> MakeFoo(Type type)
  {
    return new Foo<??>();
  }

  Void Get(T aFoo)
  {
    ...
  }
}

2 个答案:

答案 0 :(得分:5)

你不能。

通用参数由编译器使用和应用,而Type是Reflection的一部分,旨在在运行时使用类型信息。因此,如果只有System.Type,则无法定义应使用哪种类型的编译器。

但是你可以做相反的事情:

public void Foo<T>()
{
  Type t = typeof(T);
}

因此,如果您确实不需要使用Type作为参数,则可以执行以下操作:

Foo<FooParam> MakeFoo<FooParam>()
{
  return new Foo<FooParam>();
}

答案 1 :(得分:2)

你无法做到这一点,因为“Type”是一组反映的元数据 类,结构和/或枚举。

“T”是类型。

您可以使用反射将类型作为参数提供:

type.MakeGenericType(type).GetConstructor(Type.EmptyTypes).Invoke(null)

但我会投票添加一个通用参数“S”而不是输入参数“Type type” 避免使用反射,如果你这样做就没用了!