2008-09-17 30 views
7

Los siguiente devuelvetaquigrafía si + tipos anulables (C#)

Tipo de expresión condicional no puede determinarse porque no hay conversión implícita entre 'doble' y '<nula>'

aNullableDouble = (double.TryParse(aString, out aDouble) ? aDouble : null) 

La razón por la que no puedo usar unNullableBool en lugar de la ida y vuelta con aDouble es porque aNullableDouble es una propiedad de un Ent generado ityFramework class que no se puede utilizar como out out.

Respuesta

9
aNullableDouble = double.TryParse(aString, out aDouble) ? (double?)aDouble : null; 
1
aNullableDouble = (double.TryParse(aString, out aDouble)?new Nullable<double>(aDouble):null) 
+0

nuevo Nullabled() ?! ¿No es eso lo que es el doble? la sintaxis es para ?! – ljs

+0

Sí, eso también funcionará. El mío es más explícito, pero ambas formas generarán código idéntico. –

7

Sólo soplar la sintaxis a cabo en la sintaxis completa en lugar de la taquigrafía ... será más fácil de leer:

aNullableDouble = null; 
if (double.TryParse(aString, out aDouble)) 
{ 
    aNullableDouble = aDouble; 
} 
+0

Agradable. Eso agrega claridad. – ljs

0

.NET soporta nullable types, pero declarándolos como tal, tienes que tratarlos de forma un poco diferente (como es comprensible, algo que normalmente es un tipo de valor ahora es una especie de referencia-ish).

Esto también puede no ser de mucha ayuda si terminas teniendo que hacer demasiadas conversiones entre dobles que se pueden anular y dobles regulares ... como podría ser fácilmente el caso con un conjunto de clases generado automáticamente.

1

El efecto secundario interesante del uso de tipos que aceptan nulos es que realmente no se puede usar un IF de taquigrafía. La abreviatura IF debe devolver el mismo tipo de ambas condiciones, y no puede ser nula en ninguno de los casos. Por lo tanto, emitir o escribir :)