Objekt in Dezimalform umwandeln? (Nullwert möglich)
Wenn diese in den setter einer Eigenschaft:
decimal? temp = value as decimal?;
value = "90"
Aber nach der Besetzung, temp null...
Was ist der richtige Weg, um dies zu tun werfen?
InformationsquelleAutor der Frage Natrium | 2009-02-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unboxing funktioniert nur, wenn die Art identisch ist! Sie können nicht unbox eine
object
die nicht dem Zielwert. Was Sie brauchen, ist etwas entlang der Linien vonSieht, ob der Wert HIERFÜR gültigen als
decimal
. Wenn ja, dann weisen Sie esresult
; sonst weisen Sienull
. Der folgende code ist in etwa das gleiche und ist leichter zu verstehen für Menschen, die nicht vertraut mit der Bedingungsoperator?:
:InformationsquelleAutor der Antwort Konrad Rudolph
sollten Sie analysieren die dezimal. Aber wenn Sie möchten, dass Ihre dezimal-zu-null, wenn der string nicht korrekt ist, verwenden Sie TryParse :
Diese Weise vermeiden Sie Ausnahmen beim Parsen schlecht formatierte strings.
Fast alle primitiven Typen bieten eine Parse und TryParse-Methoden zum konvertieren von Strings.
Ist, wird außerdem empfohlen, einen pass, eine Kultur für den provider-argument für die Methode zur Vermeidung der Probleme mit dem Dezimaltrennzeichen. Wenn Sie Lesen von einem anderen system, CultureInfo.InvariantCulture ist wahrscheinlich der Weg zu gehen (aber es ist nicht der Standard).
InformationsquelleAutor der Antwort thinkbeforecoding
und wenn Sie
decimal? temp = (decimal?)value;
InformationsquelleAutor der Antwort StevenMcD
Wenn Sie nicht möchten, strings Parsen, aber wollen, um sicherzustellen, dass Sie erhalten, entweder
null
einedecimal
oder eine null -decimal
dann könnte man etwas wie das hier tun:Könnte man es wieder null in der letzten Zeile statt, wenn Sie wollte, um zu vermeiden, Ausnahmen, obwohl, das wäre nicht unterscheiden zwischen echter null-Werte und schlechte wirft.
Beachten Sie, dass Sie haben, verwenden Sie den operator "is", wie die "as" operator " kann nicht auf Wert-Typen und casting, ohne zu überprüfen, kann eine InvalidCastException geworfen.
Könnten Sie auch machen es zu einer extension Methode:
Und verwenden Sie es wie diese:
Dies wird helfen, vermeiden Sie code-Vertrag Warnungen über unboxing null-Verweise.
InformationsquelleAutor der Antwort Stephen Drew