2010-11-22 13 views
9

mögliche Dubletten:
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?Was ist falsch daran, nullable double auf null zu setzen?

Was stimmt nicht mit dem unten

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

Art des bedingten Ausdrucks kann nicht bestimmt werden, weil es keine implizite ist Konvertierung zwischen ‚double‘ und ‚< null>‘

+0

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

Antwort

18

Bei Verwendung: Operator, hat es auf einen einzigen Typ oder Typen zu lösen, die eine implizite Konvertierung zwischen ihnen hat. In Ihrem Fall gibt es entweder double oder null zurück, und double hat keine implizite Konvertierung in null.

Sie werden sehen, dass

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

funktioniert gut, da es ist eine implizite Konvertierung zwischen nullable double und null

-2

0.0 ist ein float wörtliche, die Nicht-NULL-Werte zulässt, während null kann nur Variablen von NULL-Typ zugewiesen werden.

Der trinäre Operator?: Muss 2 Werte des gleichen Typs wie Optionen haben.

+5

Nein, der Bedingungsoperator muss eine Konsequenz und einen alternativen Wert haben, so dass ihre * Ausdrücke * in einen * eindeutigen gemeinsamen Typ * konvertiert werden können und dieser Typ ist der Typ von * mindestens einem * der Ausdrücke. Die Ausdrücke müssen nicht vom selben Typ sein; Da "null" nicht einmal einen Typ hat, wäre es unmöglich, jemals null in einem Bedingungsausdruck zu verwenden, wenn wir es so gemacht hätten, wie Sie es beschreiben. –

+1

Und 0.0 ist ein * Double * Literal. 0.0 geht zu double, 0 zu integer. Du willst ein Float, das ist '0.0f'. –

0

Das Doppel ist 0.0 in diesem Fall

Progress = (1 == 2) ? (double?)0.0 : null; // works 
Verwandte Themen