vb.net Boolean und Nichts
Definieren wir diese Funktion :
Public Function Test(ByVal value As Boolean)
Return "blabla" + If(value = Nothing, "", If(value, "1", "0"))
End Function
Möchte ich Sie Folgendes tun :
Test(True) -> "blabla1"
Test(False) -> "blabla0"
Test(Nothing) -> "blabla"
.
Problem ist, dass Test(Nothing)
gibt "blabla0".
InformationsquelleAutor der Frage Arthur Rey | 2013-11-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen
Boolean
Wert kann nienull
(Nothing
), die Werte, die möglich sind, sindTrue
undFalse
. Sie müssen eine null-Wert, eineBoolean?
für die es in der Lage sein zu werden, null.Verwenden Sie die
HasValue
undValue
Eigenschaften der nullable-Wert zu überprüfen, ob es einen Wert ein, und erhalten den Wert:InformationsquelleAutor der Antwort Guffa
Boolean
ist ein Wert-Typ, der kein Referenztyp. Daher ist der Wert einesBoolean
variable kann nieNothing
. Wenn Sie vergleichen eineBoolean
zuNothing
VB.NET zuerst wandeltNothing
um den Standardwert für eineBoolean
dieFalse
und dann vergleicht Sie. Daher testen, um zu sehen, wenn einBoolean
variableIs Nothing
ist genauso effektiv wie die Tests, um zu sehen, ob es gleichFalse
. Wenn Sie eineBoolean
eingestellt werden kann, umNothing
Sie brauchen, um esNullable(Of Boolean)
. Es ist eine Abkürzung für,, obwohl. Um einen beliebigen Wert geben Sie null-Werte zulässt, können Sie fügen Sie einfach ein Fragezeichen nach der Art, wie diese:Wie Sie sehen, auch mit der variable als nullable, Sie immer noch nicht testen, ob es nicht null ist, durch Vergleich mit
Nothing
. Es kann als eine überraschung kommen, aberNullable(Of T)
ist eigentlich ein Wert-Typ, wie gut. Also, eher als Test, um zu sehen, ob esNothing
verwenden, sollten Sie esHasValue
Eigenschaft, wie ich in dem Beispiel demonstriert.InformationsquelleAutor der Antwort Steven Doggart
Beim Test gegen Nichts, Sie müssen verwenden Sie das Schlüsselwort Ist, aber Sie werden nicht in der Lage zu passieren, Ihren Wert als Boolean, da es funktioniert nur auf Referenztypen.
Es ist auch erwähnenswert, dass das Nichts wird standardmäßig der default-Wert, wenn es keine Referenz geben.
Können Sie Ihre Signatur zu erwarten, dass ein Objekt nicht als ein Boolean-wenn Sie möchten, dies zu tun.
InformationsquelleAutor der Antwort Kogitsune