2010-11-22 11 views
9

Possibili duplicati:
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?Cosa c'è di sbagliato nell'impostare il nullable double in null?

Cosa c'è di sbagliato con il sottostante

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

Tipo di espressione condizionale non può essere determinato, perché non v'è alcuna implicita conversione tra 'doppio' e 'nullo <>'

+0

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

risposta

18

Quando si usa l'operatore?:, deve risolvere ad un unico tipo o tipi che ha una conversione implicita tra loro. Nel tuo caso, restituirà uno double o null e il doppio non avrà una conversione implicita in null.

Vedrete che

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

funziona bene, dal momento che ci è una conversione implicita tra nullable double e null

-2

0.0 è un float letterale, che non è annullabile, mentre null può solo essere assegnato a variabili di tipo nullable.

L'operatore di riferimento?: Deve avere 2 valori dello stesso tipo di opzioni.

+5

No, l'operatore condizionale deve avere una conseguenza e un valore alternativo tale che le loro * espressioni * siano convertibili in un * tipo comune unico * e che tipo sia il tipo di * almeno uno * del espressioni. Le espressioni non devono essere dello stesso tipo; poiché "null" non ha nemmeno un tipo, sarebbe impossibile usare mai null in un'espressione condizionale se lo facessimo nel modo in cui descrivete. –

+1

E 0.0 è un * doppio * letterale. 0.0 passa al doppio, da 0 a intero. Vuoi un float, questo è '0.0f'. –

0

La doppia è 0.0 in questo caso

Progress = (1 == 2) ? (double?)0.0 : null; // works 
Problemi correlati