Wie konvertiere ich eine nullable int
zu einer int
? Angenommen, ich habe 2 Arten von int wie unten:
int? v1;
int v2;
Ich möchte zuweisen v1
Wert auf v2
. v2 = v1;
wird einen Fehler verursachen. Wie kann ich konvertieren v1
a v2
?
Wie konvertiere ich eine nullable int
zu einer int
? Angenommen, ich habe 2 Arten von int wie unten:
int? v1;
int v2;
Ich möchte zuweisen v1
Wert auf v2
. v2 = v1;
wird einen Fehler verursachen. Wie kann ich konvertieren v1
a v2
?
Wenn Sie wissen, dass v1
einen Wert hat, können Sie mit der Value
Eigentum:
v2 = v1.Value;
Die Verwendung des GetValueOrDefault
Methode wird der Wert zugewiesen, wenn es einen gibt, andernfalls der Standardwert für den Typ oder ein von Ihnen angegebener Standardwert:
v2 = v1.GetValueOrDefault(); // assigns zero if v1 has no value
v2 = v1.GetValueOrDefault(-1); // assigns -1 if v1 has no value
Sie können die HasValue
Eigenschaft zu prüfen, ob v1
hat einen Wert:
if (v1.HasValue) {
v2 = v1.Value;
}
Außerdem gibt es Sprachunterstützung für die GetValueOrDefault(T)
Methode:
v2 = v1 ?? -1;
Wenn der Standardwert für einen bestimmten Typ ein akzeptables Ergebnis ist:
if (v1.HasValue)
v2 = v1.GetValueOrDefault();
Wenn Sie einen anderen Standardwert wünschen, wenn das Ergebnis undefiniert ist:
v2 = v1.GetValueOrDefault(255); // or any valid value for int in place of 255
Wenn Sie nur den zurückgegebenen Wert wünschen (unabhängig davon, ob die Methode fehlgeschlagen ist oder nicht):
v2 = v1.GetValueOrDefault();
.NET 4.7.2.: GetValueOrDefault()
gibt den Feldwert ohne Prüfung zurück.
Je nach Anwendungskontext können Sie die Pattern-Matching-Funktion von C# 7 verwenden:
int? v1 = 100;
if (v1 is int v2)
{
Console.WriteLine($"I'm not nullable anymore: {v2}");
}
Da einige Leute ohne eine Erklärung zu hinterlassen abwerten, möchte ich einige Details hinzufügen, um zu erklären, warum dies eine praktikable Lösung ist.
C# 7's Mustervergleich ermöglicht es uns nun, den Typ eines Wertes zu überprüfen und ihn implizit zu kodieren. Im obigen Schnipsel gilt die if-Bedingung nur dann, wenn der Wert, der in v1
ist typkompatibel mit dem Typ für v2
, die in diesem Fall lautet int
. Daraus folgt, dass, wenn der Wert für v1
es null
wird die if-Bedingung fehlschlagen, da Null nicht einem int
. Richtig, null
ist kein int
.
Ich möchte darauf hinweisen, dass diese Lösung nicht immer die optimale Wahl ist. Wie ich bereits angedeutet habe, hängt dies vom genauen Nutzungskontext des Entwicklers ab. Wenn Sie bereits über eine int?
und auf dessen Wert bedingte Operationen durchführen wollen wenn-und-nur-wenn der zugewiesene Wert nicht null ist (dies ist das einzige Mal, dass es sicher ist, einen nullable int in einen regulären int zu konvertieren, ohne Informationen zu verlieren), dann ist der Mustervergleich vielleicht eine der prägnantesten Möglichkeiten, dies zu tun.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
4 Stimmen
Was ist das gewünschte Verhalten, wenn
v1
esnull
?