2009-08-05 10 views
6

que tienen un método genérico como:¿No se puede devolver 'nulo' de métodos genéricos?

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

Lo que básicamente realiza una búsqueda en una base de datos y, en algunos casos no es así (y no puede regresar) resultado y me gustaría volver nula.

Sin embargo, eso obviamente no es posible debido a 'No hay conversión implícita entre T y nulo'. ¿Qué debería hacer en este caso?

Respuesta

24

T no puede ser nulo, porque T podría ser un tipo de valor. Trate de volver predeterminado (T) o la adición de una restricción de clase para indicar que T sólo puede ser un tipo de referencia, así:

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

En .NET 3.5 al menos, lo anterior debe ser '... donde T: clase, ILevelElement'. El compilador se bloquea porque quiere que la palabra clave 'class' sea la primera. –

0

Dustin Campbell es correcto. Otra solución sería devolver default(T).

+0

oh. No vi que él ya te haya contado sobre la palabra clave predeterminada. Ignora mi respuesta. –

Cuestiones relacionadas