如何将我的参数转换为正确的类型声明。 IE浏览器。如何从type
去T
在以下从参数类型集中设置的类型参数
class Foo<T>
{
Foo<??> MakeFoo(Type type)
{
return new Foo<??>();
}
Void Get(T aFoo)
{
...
}
}
如何将我的参数转换为正确的类型声明。 IE浏览器。如何从type
去T
在以下从参数类型集中设置的类型参数
class Foo<T>
{
Foo<??> MakeFoo(Type type)
{
return new Foo<??>();
}
Void Get(T aFoo)
{
...
}
}
你不能。
通用参数被编译器使用和应用,而Type
是Reflections的一部分,用于在运行时使用类型信息。所以如果只有System.Type
,你就不能定义应该使用哪种类型的编译器。
但是你可以做相反的事情:
public void Foo<T>()
{
Type t = typeof(T);
}
所以,如果你真的不需要使用Type
作为参数,你可以做到以下几点:
Foo<FooParam> MakeFoo<FooParam>()
{
return new Foo<FooParam>();
}
你不能这样做因为“类型”是一组反映的类,结构和/或枚举的元数据 。
“T”是类型。
可以使用反射给类型作为参数:
type.MakeGenericType(type).GetConstructor(Type.EmptyTypes).Invoke(null)
但我会投票添加一个泛型参数“S”,而不是为了输入参数“类型类型”,以 避免使用反射,如果你做得对,在这种情况下无用!
是的,我明白。我有点不情愿使用你的建议的原因是,有一个非反射类的构造函数 - 与上面显示的工厂方法一起使用。工厂menthod的目的是一个使用模式与relection,因此约束可以明确地设置使用类型参数。设想一个不同的Get()如上所述,不会将T作为参数,而是一组字符串。 –
@Carlo:你能展示你真实的代码吗? –