Verwenden Sie bedingte Operatoren, um Nullable-Zuweisungen in C# zu verarbeiten
Nullable-Typ, dargestellt als Nullable<T>
, wird verwendet, um einen Wert darzustellen, der möglicherweise einen gültigen Wert hat oder nicht. Bei einigen Entwicklern kann es bei der Zuweisung von Nullable-Werten zu Problemen mit Bedingungsoperatoren kommen.
Probleme mit nullbaren Typen und bedingten Operatoren
Der Bedingungsoperator, normalerweise mit ?:
bezeichnet, wertet eine Bedingung aus und weist basierend auf ihrem Wahrheitswert einen anderen Wert zu. Wenn jedoch einer der zugewiesenen Werte ein nullbarer Typ ist und der andere nicht, generiert der Compiler aufgrund der Typinkompatibilität einen Fehler.
Betrachten Sie das folgende Beispiel:
<code class="language-csharp">EmployeeNumber = string.IsNullOrEmpty(employeeNumberTextBox.Text) ? null : Convert.ToInt32(employeeNumberTextBox.Text);</code>
Hier ist EmployeeNumber
Nullable<int>
und employeeNumberTextBox.Text
eine Zeichenfolge. Das Zuweisen von null
zu einem nullbaren Typ ist gültig, das Konvertieren einer Zeichenfolge in int
jedoch nicht. Der Compiler kann den Typ des Ausdrucks nicht korrekt ableiten.
Der Null-Koaleszenzoperator ist keine praktikable Lösung
DerNull-Koaleszenzoperator (??
) kann hier nicht verwendet werden, da eine Konvertierung von employeeNumberTextBox.Text
in null
erforderlich ist, wenn employeeNumberTextBox.Text
nicht int
ist.
In nullbaren Typ konvertieren
Um dieses Problem zu lösen, muss jeder im Bedingungsoperator zugewiesene Wert explizit in einen nullbaren Typ konvertiert werden. Dadurch kann der Compiler Ausdruckstypen korrekt auflösen:
<code class="language-csharp">EmployeeNumber = string.IsNullOrEmpty(employeeNumberTextBox.Text) ? (int?)null : Convert.ToInt32(employeeNumberTextBox.Text);</code>
oder:
<code class="language-csharp">EmployeeNumber = string.IsNullOrEmpty(employeeNumberTextBox.Text) ? null : (int?)Convert.ToInt32(employeeNumberTextBox.Text);</code>
Dies ermöglicht elegante und prägnante Zuweisungen bei der Verwendung von nullbaren Typen und bedingten Operatoren.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Nullable-Zuweisungen mit bedingten Operatoren in C# um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!