2010-02-08 90 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>();