可以通用的通用声明?

时间:2010-02-08 05:32:12

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

说我有一个对象,

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

问题是,有时我没有孩子,所以我不想宣称孩子类型又名T2,任何想法?我不能像

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

由于

2 个答案:

答案 0 :(得分:4)

没有办法为Generic Type参数指定“null” - 如果在类上声明它们,则在使用该类时它们是必需的。

如果您考虑一下,这是有道理的,因为如果没有T2,您的类将被部分未定义,这不是机器可以很好地处理的。

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

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

然后,增加了对儿童的支持的扩展程序:

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

虽然,这只是一个部分解决方案,因为你没有办法处理孙子。

答案 1 :(得分:0)

Nullable是一个天赋,所以你必须做像

这样的事情
new A<string, Nullable<?>>(); 

使用Nullable使Value类型(例如int)能够为null但是如果使用Referense Type(例如class),它仍然可以为null。 我的提示是使用A的基类,如果你没有使用Object。

new A<string, Object>();