Bedingte Operatorzuweisung mit Nullable & lt; value & gt; Arten?
EmployeeNumber =
string.IsNullOrEmpty(employeeNumberTextBox.Text)
? null
: Convert.ToInt32(employeeNumberTextBox.Text),
Oft finde ich mich wollen, zu tun, Dinge wie diese (EmployeeNumber
ist ein Nullable<int>
wie es ist eine Eigenschaft, die auf eine LINQ-to-SQL-dbml-Objekt, wo die Spalte NULL-Werte zulässt). Leider ist der compiler glaubt, dass "Es gibt keine implizite Konvertierung zwischen 'null' und 'int',", obwohl beide Arten gelten in einem Zuweisungsoperator, um eine null-int auf Ihre eigenen.
Null coalescing-operator ist nicht eine option, so weit wie ich kann sehen, weil der inline-Konvertierung, dass muss geschehen .Text Zeichenkette, falls es nicht null ist.
Soweit ich weiß der einzige Weg, dies zu tun ist die Verwendung einer if-Anweisung und/oder Zuordnung in zwei Schritten. In diesem speziellen Fall finde ich das sehr frustrierend, weil ich wollte, um das Objekt-Initialisierer-syntax, und diese Zuordnung wäre in der Initialisierungs-block...
Weiss jemand eine elegantere Lösung?
InformationsquelleAutor der Frage Grank | 2008-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem tritt auf, weil der bedingte operator nicht schauen, wie der Wert verwendet wird (zugewiesen in diesem Fall), um zu bestimmen, die Art des Ausdrucks-nur die true/false-Werte. In diesem Fall haben Sie eine null und ein Int32, und der Typ kann nicht ermittelt werden (es sind die wirklichen Gründe, es kann nicht einfach davon ausgehen, Nullable<Int32>).
Wenn Sie wirklich wollen, es zu benutzen auf diese Weise, müssen Sie die cast-einer der Werte auf Nullable<Int32> sich selbst, also C#, um den Typ:
oder
InformationsquelleAutor der Antwort Alex Lyman
Ich denke, eine utility-Methode könnte dazu beitragen, dass dieser Reiniger.
dann
InformationsquelleAutor der Antwort NerdFury
Während Alex die richtige und proximale Antwort auf Ihre Frage, die ich lieber verwenden
TryParse
:Ist es sicherer und kümmert sich um Fälle mit ungültigen Eingaben sowie Ihre leere Zeichenfolge Szenario. Ansonsten, wenn die Eingaben des Benutzers so etwas wie
1b
Sie vorgestellt werden mit einer Fehler-Seite mit die nicht behandelte Ausnahme verursacht inConvert.ToInt32(string)
.InformationsquelleAutor der Antwort user13493
Können Sie werfen die Ausgabe von Convert:
InformationsquelleAutor der Antwort Abe Heidebrecht
BEARBEITEN:
Kurze Erklärung der oben genannten, ich habe versucht, den Wert von
Posid
(wenn seine nicht-null -int
und einen Wert größer als 0 ist) in VariableX1
. Ich musste(int?)
aufPosid.Value
um den Bedingungsoperator nicht werfen alle Kompilierungsfehler.Nur ein FYI
GetHolidayCount
ist einWCF
Methode geben könntenull
oder eine beliebige Anzahl.Hoffe, das hilft
InformationsquelleAutor der Antwort Sandeep