2010-02-08 6 views
2

Nullable 일반 선언?

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

가 제네릭 형식 매개 변수에 대한 "널 (null)"을 지정하는 방법은 없습니다처럼에 전달할 수 없습니다.

T2이 없으면 클래스가 부분적으로 정의되지 않아 컴퓨터가 잘 처리 할 수 ​​없기 때문에이 방법이 좋습니다.

아마도 당신이해야 할 일은 수업을 2 개로 나누는 것입니다. 첫째, 자녀가없는 클래스 : 다음

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

, 어린이에 대한 지원이 추가 확장 :

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

비록, 즉 단지 부분적인 해결책은 당신이 처리 할 수있는 방법을하지 않는 한,의 손자. 당신은 당신이 null이 될 (예를 들어, int)를 할 수 값 유형을 만들기 위해 Null 허용을 사용

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

처럼 뭔가를해야하지만, 그래서

0

Null 허용은 genric 그 자체입니다 당신이 Referense 유형을 사용하는 경우 (예 : 클래스) 어쨌든 null 일 수 있습니다. 하나의 Object를 사용하지 않으면 팁에 A의 기본 클래스를 사용하는 것이 좋습니다.

new A<string, Object>();