Wie konvertiert man C # nullable int in int
Wie konvertiere ich eine null - int
zu einem int
? Angenommen ich habe 2 Typ int als unten:
int? v1;
int v2;
Will ich weisen Sie v1
's Wert v2
. v2 = v1;
einen Fehler verursachen. Wie kann ich umwandeln v1
zu v2
?
InformationsquelleAutor der Frage KentZhou | 2011-05-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den anderen Antworten bisher sind alle richtig; ich wollte nur eine weitere hinzufügen, die etwas cleaner:
Jede
Nullable<T>
implizit konvertierbar seinT
werden, VORAUSGESETZT, dass der gesamte Ausdruck ausgewertet wird, kann niemals das Resultat eine null-Zuweisung zu einem ValueType. So, die null-coalescing operator??
ist nur syntax sugar für den ternären operator:...das wiederum ist syntax-Zucker für eine if/else:
Ab .NET 4.0,
Nullable<T>
hat eine "GetValueOrDefault ()" - Methode, die ein null-safe-getter, die im Grunde führt die null-coalescing oben gezeigt, dies funktioniert ja auch:InformationsquelleAutor der Antwort KeithS
Wie diese,
InformationsquelleAutor der Antwort Srinivas Reddy Thatiparthy
Können Sie mithilfe der Value-Eigenschaft für die Zuordnung.
InformationsquelleAutor der Antwort e36M3
Alles, was Sie brauchen, ist..
InformationsquelleAutor der Antwort thestar
Können Sie es nicht tun, wenn v1 null ist, aber Sie können mit einem operator.
InformationsquelleAutor der Antwort Arturo Martinez
Wenn Sie wissen, dass
v1
einen Wert hat, können Sie dieValue
Eigenschaft:Mithilfe der
GetValueOrDefault
Methode weisen Sie den Wert, wenn es einen gibt, andernfalls der Standardwert für den Typ, oder ein Standard-Wert, den Sie angeben:Können Sie die
HasValue
Eigenschaft um zu prüfen, obv1
hat einen Wert:Es ist auch die Sprache Unterstützung für die
GetValueOrDefault(T)
Methode:InformationsquelleAutor der Antwort Guffa
ruft den Wert des Objekts. Wenn er null ist, gibt es den default-Wert int ist 0.
Beispiel:
InformationsquelleAutor der Antwort Aniket Sharma
es ist möglich, mit
v2 = Convert.ToInt32(v1);
InformationsquelleAutor der Antwort Rev
Int nullable int-Umwandlung kann getan werden, etwa so:
InformationsquelleAutor der Antwort Krishna shidnekoppa
Könnten Sie tun,
InformationsquelleAutor der Antwort FIre Panda
Eine einfache Umrechnung zwischen
v1
undv2
ist nicht möglich, dav1
hat einen größeren Domäne von Werten alsv2
. Es ist allesv1
halten kann, plus dienull
Zustand. Zu konvertieren, müssen Sie explizit angeben, welche Wert inint
wird verwendet, um die anzeigen dernull
Zustand. Der einfachste Weg, dies zu tun ist die??
BetreiberDies kann auch getan werden, lange form
InformationsquelleAutor der Antwort JaredPar
Soweit ich betroffen bin, die beste Lösung ist die Verwendung
GetValueOrDefault()
Methode.InformationsquelleAutor der Antwort Masoud Darvishian
Wenn der Standardwert für einen bestimmten Typ ist ein akzeptables Ergebnis:
Wenn Sie einen anderen Standard-Wert, wenn das Ergebnis nicht definiert ist:
Wenn Sie wollen einfach nur den Wert, der zurückgegeben wird (egal, wenn die Methode fehlgeschlagen ist oder nicht):
.NET 4.7.2.: .GetValueOrDefault()">
GetValueOrDefault()
gibt den Wert des Feldes ohne überprüfung.InformationsquelleAutor der Antwort GrzegorzF
Wird es Wert zuweisen von
v1
zuv2
wenn es nicht null ist, sonst dauert es einen Standard-Wert als null.Oder unten ist der andere Weg, es zu schreiben.
InformationsquelleAutor der Antwort sagar
Abhängig von Ihrem nutzungskontext, können Sie mit C# 7 pattern-matching-Funktion:
EDIT:
Da einige scheinen nicht zu begreifen, dass dies eine perfekt gültige Antwort (anspielend auf downvotes), werde ich hinzufügen, einige "details" zu erklären, die Begründung für die Einbeziehung dieser als eine praktikable Lösung. Normalerweise hätte ich nicht diese Art der Sache, aber ich immer noch der festen überzeugung, dass StackOverflow sollte eine hohe Qualität der Ressource, und ich glaube, dass up-to-date Antworten sind auch sehr wichtig.
C# 7 pattern-matching erlaubt es uns nun überprüfen Sie den Typ eines Wertes und wirken implizit. In dem obigen Schnipsel, die if-Bedingung wird nur passieren, wenn der gespeicherte Wert in
v1
ist Typ-kompatibel zum Typ fürv2
die in diesem Fall istint
. Es folgt, dass, wenn der Wert fürv1
istnull
die if-Bedingung schlägt fehl, da null nicht zugewiesen werden kann, um eineint
. Mehr richtignull
ist nicht einint
.Möchte ich hervorheben, dass die, dass diese Lösung nicht immer die optimale Wahl. Da schlage ich vor, ich glaube, das hängt davon ab, auf der Entwickler die genauen Nutzungs-Kontext. Wenn Sie bereits ein
int?
und wollen bedingt betreiben auf Ihren Wert wenn-und-nur-wenn der zugewiesene Wert nicht null ist (dies ist die einzige Zeit, es ist sicher zu konvertieren Sie eine nullable int zu einem regelmäßigen int, ohne Informationen zu verlieren), dann pattern matching ist eine der vielleicht prägnanteste Möglichkeiten, dies zu tun.InformationsquelleAutor der Antwort Nick Miller