如何在C#中传递通配符

时间:2012-09-29 02:11:18

标签: c# generics

我有以下内容:

public class Foo<T> : Goo
    where T: SomeClass<?>, new()

我知道吗?在C#中不是一个真正的通配符,但是,你如何在C#中正确编写它,以便SomeClass可以将任何类作为参数?我尝试使用对象,但后来我收到错误“......没有来自......的隐式引用转换”

谢谢!

1 个答案:

答案 0 :(得分:6)

您必须指定第二个类型参数(即我的示例中的Y),请注意Y可以是任何内容,因为没有限制,甚至与T相同。

public class Foo<T, Y> : Goo
    where T: SomeClass<Y>, new()

另一个选择是只指定第二个类,如果只需要在泛型类中使用SomeClass<Y>,则不需要new()限制,因为编译器事先知道SomeClass<T>具有默认构造函数:

public class Foo<Y> : Goo{
  public SomeClass<Y> Value;

  public void Setup() { Value = new SomeClass<Y>(); }
}