【问题标题】: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>();