2010-02-08 84 views
2

说我有一个对象,可为空的泛型声明?

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. 

感谢

回答

4

有没有办法来指定一个泛型类型参数“空” - 如果你声明它们的类,它们在使用这个类是强制性的。

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

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

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

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

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

虽然,这只能解决部分问题,因为你没有得到的方式来处理孙子。

0

可空是一个genric它的自我,所以你必须做一些像

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

您使用可空,使值类型(如int)能为空,但如果你使用Referense类型(例如类)无论如何它可以是空的。 如果你没有一个使用Object,我的提示是使用A的基类。

new A<string, Object>();