我有以下内容:
public class Foo<T> : Goo
where T: SomeClass<?>, new()
Run Code Online (Sandbox Code Playgroud)
我知道 ?在C#中不是一个真正的通配符,但是,你如何在C#中正确编写它,以便SomeClass可以将任何类作为参数?我尝试使用对象,但后来我收到一个错误"......没有隐式的引用转换......"
谢谢!
你必须指定第二种类型的参数(即Y在我的样本中),注意Y可能是任何东西,因为没有限制,甚至相同T.
public class Foo<T, Y> : Goo
where T: SomeClass<Y>, new()
Run Code Online (Sandbox Code Playgroud)
另一个选择是只指定第二个类,如果你只需要SomeClass<Y>在你的泛型类中使用,你就不需要new()限制,因为编译器事先知道它SomeClass<T>有默认的构造函数:
public class Foo<Y> : Goo{
public SomeClass<Y> Value;
public void Setup() { Value = new SomeClass<Y>(); }
}
Run Code Online (Sandbox Code Playgroud)