【问题标题】:Nullable Generic Declaration?可以为空的通用声明?
【发布时间】:2011-01-14 06:07:20
【问题描述】:

假设我有一个对象,

Class A<T, T2>
{
   public T MyObject {get;set;}
   public IList<A<T2>> MyChildren {get;set;} 
}

问题是,有时我没有孩子,所以我不想声明孩子类型aka T2,有什么想法吗?我不能像

A a = new A<string, Nullable>(); as it is throwing an error.

谢谢

【问题讨论】:

    标签: c# .net generics .net-3.5 types


    【解决方案1】:

    无法为泛型类型参数指定“null” - 如果您在类中声明它们,则在使用该类时它们是强制性的。

    如果你仔细想想,这是有道理的,因为没有T2,你的类将部分未定义,这不是机器可以处理好的。

    您可能需要做的是将班级分成两部分。首先,你的班级没有孩子:

    class Widget<T>
    {
        public T MyObject { get; set; }
    }
    

    然后,添加对儿童的支持的扩展:

    class WidgetWithChildren<T,T2>: Widget<T>
    {
        public IList<Widget<T>> MyChildren { get; set; }
    }
    

    不过,这只是部分解决方案,因为您没有办法处理孙辈。

    【讨论】:

      【解决方案2】:

      Nullable 本身就是一个泛型,所以你必须做类似的事情

      new A<string, Nullable<?>>(); 
      

      您使用 Nullable 使值类型(例如 int)能够为 null,但如果您使用引用类型(例如类),它无论如何都可以为 null。 我的建议是使用 A 的基类,如果你没有使用 Object。

      new A<string, Object>(); 
      

      【讨论】:

        猜你喜欢
        • 2017-11-21
        • 2021-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-08
        • 1970-01-01
        • 2020-06-19
        • 1970-01-01
        相关资源
        最近更新 更多