c# - 从封闭泛型中提取泛型类型

标签 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<string>());

我收到错误“通用类型‘Boo’需要‘1’类型参数。是的,我通过显式声明模板类型解决了这个问题,但我想知道是否有一种方法可以提取它隐式键入,而不必显式声明。

这个其他post may be related ,但我不确定。

最佳答案

您不能直接使用泛型类型的构造函数隐式执行此操作,但可以使用泛型方法,例如在非泛型类中:

public static class Boo
{
    public Boo<T> Create<T>(Foo<T> foo)
    {
        return new Boo<T>(foo);
    }
}

然后:

// myBoo will be inferred to be of type Boo<string>
var myBoo = Boo.Create(new Foo<string>());

当然,它不一定是另一个名为 Boo 的类 - 它可能是完全不同的东西,也可能是其他东西的实例方法:

var factory = new BooFactory();
var myBoo = factory.Create(new Foo<string>());

重要的是,它是一个泛型方法 - 可以为泛型方法推断类型参数,但不能为泛型类型推断。

关于c# - 从封闭泛型中提取泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4369364/

相关文章:

c# - 如何围绕 C#/Java 中缺少 const 进行设计?

c# - 如何让 WebBrowser 等到它完全加载?

c# - 背包问题和的可能组合?

java - 实现返回类型为 Class<T1<T2>> 的抽象方法

java - 同质化一个集合

c++ - ffs 不命名 C++ 中的类型

c# - 未触发 WCF 客户端关闭事件

Java 泛型和继承困惑

Powershell:嵌套 XML 元素是字符串类型而不是 XmlElement

haskell - 类型系列 : top level vs. 相关联