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>());