2010-04-29 12 views

Respuesta

21

Lo mejor es default(int?) porque siempre funciona como se espera (tipos de referencia, tipos de valores e incluso en genéricos).

+0

no visto esto antes, me gusta! Siempre he usado (int?) Null y siempre sentí que era torpe. –

5

Tiendo a preferir la notación (int?) al Nullable<int>. El lenguaje proporciona este azúcar sintáctico, así que trato de usarlo.

También es por eso que lo llamo int en lugar de Int32.

1

Lo interesante es que sólo tiene que definir uno de los tipos de retorno. En otras palabras, esto también funcionará:

return Int32.TryParse(Request["id"], out i) ? (int?)i : null; 

... a pesar de que el compilador sugiere que tiene que emitir el nulo: Tipo de expresión condicional no se puede determinar porque no hay una conversión implícita entre 'int' y '< null>'

2

hacer lo que sea más claro para usted.

Dicho esto, prefiero simplemente devolver null y el compilador resuelve los detalles.

5

No importa, genera el mismo código . (int?)null se traduce por el compilador de C# al new Nullable<int>(). Esto se puede ver por sí mismo escribiendo un pequeño programa de prueba y mirándolo con ildasm.exe

Así "mejor" no es más que lo que el estilo que prefiera. Uso consistente de int? sería mi preferencia personal

Una nota práctica: en una típica sesión de depuración que bien podría ser interesado en saber que está siendo nula devuelto. Especialmente porque los datos que lees no producen lo que esperas. Eso se convierte en muy fácil si se escribe la declaración nulo regresar en una línea separada:

int i; 
    if (Int32.TryParse(Request["id"], out i)) return i; 
    else return null;  // <== set breakpoint here. 

Get de librarse del reparto también. Y produce el mismo código exacto

Cuestiones relacionadas