2010-11-22 13 views
9

duplicados posibles:
Why can't I set a nullable int to null in a ternary if statement?
Nullable types and the ternary operator. Why won't this work?¿Qué hay de malo en establecer nulo doble a nulo?

Cuál es incorrecto con el siguiente

public double? Progress { get; set; } 
Progress = null; // works 
Progress = 1; // works 
Progress = (1 == 2) ? 0.0 : null; // fails 

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

+0

dup http://stackoverflow.com/questions/2766932/why-cant-i-set-a-nullable-int-to-null-in- a-ternary-if-statement – pavanred

Respuesta

18

Cuando se utiliza el operador?:, tiene que resolver a un solo tipo o tipos que tiene una conversión implícita entre ellos. En su caso, devolverá un double o null, y el doble no tiene una conversión implícita a null.

Usted verá que

Progress = (1 == 2) ? (double?)0.0 : null; 

funciona bien, ya que no es una conversión implícita entre nullable double y null

-2

0.0 es un literal float, que no es anulable, mientras null sólo puede ser asignado a variables de tipo anulable.

El operador trinario?: Debe tener 2 valores del mismo tipo que las opciones.

+5

No, el operador condicional debe tener una consecuencia y un valor alternativo tal que sus * expresiones * sean convertibles a * un tipo común único * y ese tipo sea el tipo de * al menos uno * del expresiones. Las expresiones no tienen que ser del mismo tipo; dado que "null" ni siquiera tiene un tipo, sería imposible usar null en una expresión condicional si lo hiciéramos de la forma en que lo describes. –

+1

Y 0.0 es un * doble * literal. 0.0 va al doble, 0 al entero. Quieres un flotador, eso es '0.0f'. –

0

El doble es 0.0 en este caso

Progress = (1 == 2) ? (double?)0.0 : null; // works 
Cuestiones relacionadas