it-swarm.com.de

c # warum kann ein nullable int nicht als Wert null zugewiesen werden

Erklären Sie, warum einem nullfähigen int nicht der Wert null zugewiesen werden kann, z

int? accom = (accomStr == "noval" ? null  : Convert.ToInt32(accomStr));

Was ist los mit diesem Code?

121
mancmanomyst

Das Problem ist nicht, dass null nicht einem int? Zugewiesen werden kann. Das Problem besteht darin, dass beide vom ternären Operator zurückgegebenen Werte vom selben Typ sein müssen oder einer implizit in den anderen konvertierbar sein muss. In diesem Fall kann null nicht implizit in int oder umgekehrt konvertiert werden, sodass eine explizite Umwandlung erforderlich ist. Versuchen Sie dies stattdessen:

int? accom = (accomStr == "noval" ? (int?)null : Convert.ToInt32(accomStr));
235

Was Harry S sagt, ist genau richtig, aber

int? accom = (accomStr == "noval" ? null : (int?)Convert.ToInt32(accomStr));

würde auch den Trick machen. (Wir Resharper-Benutzer können uns immer in Massen erkennen ...)

40
Will Dean

Eine andere Option ist zu verwenden

int? accom = (accomStr == "noval" ? Convert.DBNull : Convert.ToInt32(accomStr); 

Ich mag dieses am meisten.

6
Genius

Ebenso habe ich lange gemacht:

myLongVariable = (!string.IsNullOrEmpty(cbLong.SelectedItem.Value)) ? Convert.ToInt64(cbLong.SelectedItem.Value) : (long?)null;
1
tenss