说我有一个对象,
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.
由于
答案 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>();