如何在C#中传递通配符

Elf*_*ЯUs 5 c# generics

我有以下内容:

public class Foo<T> : Goo
    where T: SomeClass<?>, new()
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Ale*_*kov 6

你必须指定第二种类型的参数(即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)