2011-01-31 64 views

回答

5

你不能。

通用参数被编译器使用和应用,而Type是Reflections的一部分,用于在运行时使用类型信息。所以如果只有System.Type,你就不能定义应该使用哪种类型的编译器。

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

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

所以,如果你真的不需要使用Type作为参数,你可以做到以下几点:

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

是的,我明白。我有点不情愿使用你的建议的原因是,有一个非反射类的构造函数 - 与上面显示的工厂方法一起使用。工厂menthod的目的是一个使用模式与relection,因此约束可以明确地设置使用类型参数。设想一个不同的Get()如上所述,不会将T作为参数,而是一组字符串。 –

+0

@Carlo:你能展示你真实的代码吗? –

2

你不能这样做因为“类型”是一组反映的类,结构和/或枚举的元数据 。

“T”是类型。

可以使用反射给类型作为参数:

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

但我会投票添加一个泛型参数“S”,而不是为了输入参数“类型类型”,以 避免使用反射,如果你做得对,在这种情况下无用!