Was ist der Unterschied zwischen "Bool" und "Bool"?
Ich den "bool" - Typ für Variablen, als ich war früher in C++, und ich versuche, die Werte von Funktionen oder Eigenschaften, die ich erwarte "boolean" in meine variable. Allerdings Gerate ich oft in Fällen, in denen das Ergebnis vom Typ "bool?" und nicht "bool" und die implizite Typumwandlung fehlschlägt.
Was ist der Unterschied zwischen den beiden und Wann werden die jeweils verwendet? Auch, sollte ich "bool?" als der Typ meine variable? Dies ist die beste Praxis?
Kommentar zu dem Problem
mögliche Duplikate von Was bedeutet "DateTime?" bedeutet in C#?
InformationsquelleAutor der Frage Roee Adler | 2009-07-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
?
symbol nach einer Art ist nur eine Verknüpfung zu der Nullable-Typ,bool?
entsprichtNullable<bool>
.bool
ist ein Wertetyp, das heißt, es kann seinnull
, so die Nullable-Typ im Grunde können Sie wrap-Wert Arten und weisennull
zu Ihnen.bool?
enthalten kann drei verschiedene Werte:true
,false
undnull
.Auch, es gibt keine short-circuiting-Operatoren (&& ||) definiert für
bool?
Nur die logische UND inklusive ODER-Operatoren sind definiert und Sie Verhalten sich so:
Die Nullable-Typ ist im Grunde eine generische Struktur, die folgende öffentliche Eigenschaften:
Den
HasValue
Eigenschaft gibt an, ob das aktuelle Objekt einen Wert hat, und dieValue
Eigenschaft erhalten den aktuellen Wert des Objektes, oder wenn HasValue false ist, wird es werfen eine InvalidOperationException.Nun müssen Sie sich Fragen, etwas, Nullable ist eine Struktur, einen Wert geben, der nicht null sein darf, also warum die folgende Aussage gültig ist?
Diesem Beispiel wird die Kompilierung in:
Einen Anruf zu initobj, die initialisiert jedes Feld den Wert geben Sie an einer angegebenen Adresse um eine null-Referenz oder eine 0 des entsprechenden primitiven Typ.
Das ist es, was hier passiert ist die Standard -struct-Initialisierung.
Ist äquivalent zu:
InformationsquelleAutor der Antwort CMS
bool?
null-Werte zulässt, währendbool
nicht.Im obigen code
first
wirdnull
währendsecond
wirdfalse
.Eine typische Anwendung ist, wenn Sie wissen möchten, ob es eine Zuweisung an die variable vorgenommen. Da
bool
ist ein Wert Typ (nur alsint
,long
,double
,DateTime
und einige andere Arten), es wird immer initialisiert werden, um einen default-Wert (false
im Falle einerbool
,0
im Falle einerint
). Dies bedeutet, dass Sie nicht leicht zu wissen, ob esfalse
weil einige code zugewiesenfalse
um es, oder wenn esfalse
weil es noch nicht zugewiesen wurde. In diesem Fallbool?
kommt in handliches.InformationsquelleAutor der Antwort Fredrik Mörk
Wann immer Sie die ? folgenden Zeichen ein geben Sie Namen, es ist die Kurzform für
Nullable<TypeName>
. Null-Werte zulässt, ist eine spezielle Art, die erlaubt, dass Wert-Typen zu handeln, wie ein null-Wert. Es ist ein Weg, der explizit zum Ausdruck einen Wert geben können, haben eine non-Wert.Für bool-es wirksam schaltet die variable in eine tri-state-Wert
InformationsquelleAutor der Antwort JaredPar
Hinzufügen
?
macht der Typ null-Lage. Was bedeutet, dass Sie dies tun können:, Und es wäre völlig OK.
InformationsquelleAutor der Antwort Kredns
bool? bedeutet, dass der boolean auf null gesetzt und ist syntaktischer Zucker für eine Stuktur
Nullable<bool>
. Da ein boolean ist einen Wert geben, Sie können nicht legen Sie es auf null, aber es gibt einige Fälle, wo Sie wollen, um wie in einem data access class, weil Datenbank-Felder müssen null-Werte.InformationsquelleAutor der Antwort Charlie
bool
enthalten nurtrue
undfalse
Werte währendbool?
können auch einenull
Wert.InformationsquelleAutor der Antwort RaYell
Ein weiterer guter Ort, um zu verwenden, bool? ist eine Methode zum hinzufügen von null-Prüfung
InformationsquelleAutor der Antwort EricM
bool bedeutet, können Sie die Werte true und false.
bool? heißt, Sie können einen Wert von true, false und null.
Funktioniert es für datetime-und Boolesche Werte.
InformationsquelleAutor der Antwort EP O Colla