我有以下内容:
public class Foo<T> : Goo
where T: SomeClass<?>, new()
我知道吗?在C#中不是一个真正的通配符,但是,你如何在C#中正确编写它,以便SomeClass可以将任何类作为参数?我尝试使用对象,但后来我收到错误“......没有来自......的隐式引用转换”
谢谢!
答案 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>(); }
}