C# 从封闭泛型中提取泛型类型
我想要这样的东西:C# 从封闭泛型中提取泛型类型,c#,generics,types,C#,Generics,Types,我想要这样的东西: class Foo<T>{...} class Boo<T>{ Queue<T> stuff = new Queue<T>(); public void Boo(Foo<T>){...}; } ... //Extract the generic type - string - to define the type //of MyBoo. var MyBoo = new Boo(new Foo&l
class Foo<T>{...}
class Boo<T>{
Queue<T> stuff = new Queue<T>();
public void Boo(Foo<T>){...};
}
...
//Extract the generic type - string - to define the type
//of MyBoo.
var MyBoo = new Boo(new Foo<string>());
class Foo{…}
类Boo{
Queue stuff=新队列();
公共无效Boo(Foo){…};
}
...
//提取泛型类型string来定义类型
//我的宝贝。
var MyBoo=newboo(newfoo());
我得到错误“泛型类型'Boo'需要'1'类型参数。是的,我通过显式声明模板类型解决了这个问题,但我想知道是否有/有一种方法可以隐式提取该类型,而不是显式声明它
此,但我不确定。类型推断只适用于方法。因此,如果有泛型方法,并且很清楚如何替换泛型参数,它将被编译器取代。对于<代码>新< /COD>操作符,它不起作用,所以考虑创建工厂方法,如<代码>创建< /代码>,它将产生<代码> BOO。否则不可能。
您不能直接使用泛型类型的构造函数隐式执行此操作,但可以使用泛型方法,例如在非泛型类中:public static class Boo
{
public Boo<T> Create<T>(Foo<T> foo)
{
return new Boo<T>(foo);
}
}
重要的一点是它是一个泛型方法-可以为泛型方法推断类型参数,但不能为泛型类型推断。它应该是“Bar”而不是“Boo”。@siride它真的很重要吗?@Andrey:不,所以我把它作为一个注释。
// myBoo will be inferred to be of type Boo<string>
var myBoo = Boo.Create(new Foo<string>());
var factory = new BooFactory();
var myBoo = factory.Create(new Foo<string>());