【问题标题】:How to pass a wildcard in C#如何在 C# 中传递通配符
【发布时间】:2012-09-29 02:11:17
【问题描述】:

我有以下几点:

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

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

谢谢!

【问题讨论】:

    标签: c# generics


    【解决方案1】:

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

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

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

    public class Foo<Y> : Goo{
      public SomeClass<Y> Value;
    
      public void Setup() { Value = new SomeClass<Y>(); }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-08-09
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      • 2018-10-29
      • 2018-01-15
      • 2017-12-04
      • 2019-10-04
      相关资源
      最近更新 更多