2010-06-14 31 views
7

He creado un SPROC que guarda un objeto y devuelve el ID del nuevo objeto guardado. Ahora, me gustaría devolver un int. No un int.¿Cómo convierto int? en int

public int Save(Contact contact) 
{ 
    int? id; 
    context.Save_And_SendBackID(contact.FirstName, contact.LastName, ref id); 
    //How do I return an int instead of an int? 
} 

Gracias por ayudar a

Respuesta

16
return id.Value; // If you are sure "id" will never be null 
si no

o

return id ?? 0; // Returns 0 if id is null 
+1

Tenga en cuenta que 'id.Value' lanzará una excepción cuando id sea nulo. En algunos contextos, eso será apropiado; de lo contrario, use '??'. –

+0

¿No es esto lo que sugerí? –

+0

¿'' 'solo funciona con Nullable <>, o también tipos de referencia regulares? –

3
return id.Value; 

Es posible que desee comprobar si id.HasValue es cierto, y devolver 0 o algo así.

0
if (id.HasValue) return id.Value; 
else return 0; 
+1

o ** return id ?? 0 **. Exactamente lo mismo :) –

+1

Esa es una manera bastante larga de decir "' id ?? 0' " – Blorgbeard

+0

@Blogbeard: Técnicamente, sería' return id ?? 0; ':) –

6

Puede utilizar la función GetValueOrDefault() en Nullable.

return id.GetValueOrDefault(0); // Or whatever default value is wise to use... 

Tenga en cuenta que esto es similar a la coalescing answer by Richard77 pero yo diría que un poco más legible ...

Sin embargo, decidir si esta es una buena idea depende de usted. Tal que tal vez una excepción es más apropiada?

if (! id.HasValue) 
    throw new Exception("Value not found"); // TODO: Use better exception type! 

return id.Value; 
+1

+1 por sugerir que lanzar una excepción podría ser lo apropiado. Me parece que demasiados programadores son muy rápidos al usar un valor predeterminado, sin primero asegurarse de que null no sea realmente un error. – Phong

0
return id.HasValue ? id.Value : 0; 

esto devuelve el valor de ID en caso de que no es nulo y 0 en otro caso.

+0

¿Qué pasa con 'return id ?? 0; ', que hace exactamente lo mismo y es más eficiente? –