2009-08-05 19 views
6

Mam metoda rodzajowa jak:Nie można zwrócić 'null' z ogólnych metod?

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

który zasadniczo wykonuje odnośnika w dB, aw niektórych przypadkach nie ma (i nie może wrócić) wynik i chciałbym wrócić zerowy.

Oczywiście nie jest to możliwe z powodu "Nie istnieje żadna niejawna konwersja między T i null". Co powinienem zrobić w tym przypadku?

Odpowiedz

24

T nie może być pusta, ponieważ T może być typem wartości. Spróbuj wrócić domyślną (T) lub dodanie ograniczenia klasy, aby wskazać, że T może być tylko rodzajem odniesienia tak:

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

Przynajmniej .NET 3.5 powyższe powinno być '... where T: class, ILevelElement'. Dławiki kompilatora, ponieważ chcą, aby słowo kluczowe "class" było pierwsze. –

0

Dustin Campbell ma rację. Innym rozwiązaniem byłoby zwrócić default(T).

+0

oh. Nie widziałem, żeby już mówił o domyślnym słowie kluczowym. Zignoruj ​​moją odpowiedź. –

Powiązane problemy