2009-08-05 6 views
6

나는 일반적인 방법을 가지고있다 :제네릭 메서드에서 'null'을 반환 할 수 없습니까?

public T GetLevelElement<T>(string name) where T : ILevelElement 
{ 
    //[...] 
} 

기본적으로 db에서 조회를 수행하고 어떤 경우에는 결과를 반환하지 않고 반환 할 수 없으며 null을 반환하고 싶다.

그러나 분명히 ' 때문에 가능하지 않습니다. T와 null 사이의 암시 적 변환은 없습니다'. 이 경우 어떻게해야합니까?

답변

24

T는 값 유형이 될 수 있으므로 null 일 수 없습니다. 기본 (T)를 반환하거나 참조 만 형과 같이 될 수 T를 나타내는 클래스 제약 조건을 추가하십시오 :

public T GetLevelElement<T>(string name) where T : ILevelElement, class 
{ 
    [...] 
} 
+3

최소한 .NET 3.5에서는 위의 내용이 '... where T : class, ILevelElement'이어야합니다. 컴파일러는'class' 키워드가 제일 먼저 필요하기 때문에 질식합니다. –

0

더스틴 캠벨 권리입니다. 또 다른 해결책은 default(T)을 반환하는 것입니다.

+0

오. 나는 그가 당신에게 이미 기본 키워드에 대해 말한 것을 보지 못했습니다. 내 대답을 무시하십시오. –

관련 문제