5

我有以下内容:

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

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

谢谢!

4

1 回答 1

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>(); }
}
于 2012-09-29T02:13:19.457 回答