UND die operation kann nicht angewendet werden, zwischen nullable bools
Ich bin die Anwendung UND den Betrieb (&&
) zwischen zwei nullable boolean ( bool?
), aber es gibt mir eine Fehlermeldung, dass
Betreiber
&&
angewendet werden kann nicht auf Operanden vom Typbool?
undbool?
Wie bewerbe ich mich und den Betrieb in meiner Aussage enthält zwei null-Werte zulässt bools?
Auch wenn ich einen dialog führen, wie
dialog.ShowDialog () == DialogResult.OK
Wie kann ich umwandeln nullable bool als ich '&&' - operator, die mit dieser in einer if-Bedingung, deren andere operand gibt eine nullable bool?
Hier ist der code:
if (dialog.ShowDialog () == DialogResult.OK && CheckProjectPath(dialog.FileName, true))
den zweiten Operanden in dieser if-Bedingung wird ein nullable bool.
- Das ist keine null-Werte.
- Der linke operand nicht null sein und der zweite operand gibt nullable bool. Nun das compile-Fehler, ich bin immer isOperator '&&' angewendet werden kann nicht auf Operanden vom Typ 'bool' und 'bool?'
- Ist das Ergebnis Ihrer CheckProjectPath Methode eine null-bool?
- Welches Verhalten benötigen Sie für
true && null
? - der zweite operand ist nullable bool, es ist nicht unbedingt null. Ich habe die Nachricht im Feld für ja, Nein, Abbrechen. Daher brauche ich drei Werte für bool.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tja, was soll geschehen? Der Grund, warum das illegal ist, weil schlimme Dinge passieren, wenn der erste operand null ist.
Was bedeutet
x && y
bedeuten für nullable Boolean x und y? Nun, was macht ein nullable Boolean bedeutet in Erster Linie? Ein nullable Boolean bedeutet, dass eines von drei Dingen:Also, was bedeutet
x && y
bedeuten? Es bedeutet "bewerten, y nur, wenn Bedingung x ist wahr", aber wenn x ist null-Werte zulässt, dann wir könnten nicht wissen, ob die Bedingung, vertreten durch x wahr ist oder nicht.Zum Beispiel, nehmen wir an, wir haben:
Wenn SalesForNovemberWereMoreThanAMillionbucks falsch ist, dann versuchen Sie nicht, das Geld einzahlen, und wir wissen, wir haben kein Geld in der bank. Wenn es wahr ist, dann versuchen, das Geld einzahlen; wenn das fehlschlägt, dann haben wir nicht Geld in Zürich, wenn es gelingt, werden wir tun.
Nehmen wir nun an, dass nicht alle Verkäufer haben berichtet, sind die Verkaufszahlen für November noch. Wissen wir, ob die Umsätze für November wurden mehr als eine million Dollar? Nein. November ist in der Vergangenheit, entweder die Umsätze waren, oder Sie waren nicht mehr als eine million Dollar, aber jetzt wissen wir nicht. Die richtige Antwort ist nicht "falsch", die richtige Antwort ist nicht "wahr": die korrekte Antwort "wir wissen es nicht": null.
Also, was soll dieser tun, wenn null zurückgegeben wird, durch den ersten Operanden? Wir wissen nicht, ob die Umsätze wurden mehr als eine million Dollar, so ist die richtige Sache zu tun, um zu versuchen, um das Geld einzahlen, oder zu versuchen, nicht das Geld einzahlen? Sollten Sie Maßnahmen ergreifen, auf der Grundlage von fehlenden Informationen, oder nicht?
Der compiler hat keine Möglichkeit zu entscheiden, diese Frage für Sie. Wenn Sie wollen nicht das Geld einzahlen, wenn das Ergebnis unbekannt ist, dann muss man sagen, dass:
(SalesForNovemberWereMoreThanAMillionBucks() ?? false)
bedeutet, "wenn das Ergebnis null war, es zu behandeln, als wäre es "false".Ähnlich, wenn Sie sagen:
und x ist wahr und y ist null, und was sollten Sie tun? Sagen Sie "Zerlegen nur wenn x und y beide wahr. x wahr ist, und wir nicht wissen, ob y wahr ist oder nicht". So sollten Sie Zerlegen oder nicht? Sie nicht wissen,. Der compiler nicht wissen, entweder. Wenn das, was Sie sagen wollen, ist "Zerlegen, wenn x wahr und y ist entweder wahr oder null," sagen dann:
Oder "zerlegen, wenn x wahr und y wahr ist, aber nicht, wenn y null ist," sagen dann:
Nun, wenn Sie nicht mit der && Betreiber für die Zwecke der Kurzschluss Auswertung dann nicht die && Vermittlung in den ersten Platz. Verwenden Sie die & operator; es wertet immer beide Seiten, so dass es keine Zweideutigkeit hier. Es ist völlig legal zu sagen "x & y", wenn x und y null-Werte zulassen bools; das Ergebnis wird null sein, wenn x oder y null sind, ist wahr, wenn x und y beide true, andernfalls false. Sie kann immer noch nicht verwenden, das Ding in einem "wenn" natürlich; das erfordert ein boolescher Wert, nicht eine nullable bool. Aber man kann sagen:
wobei x und y sind null-Werte zulässt bools.
Können Sie so etwas wie
Müssen Sie wählen Sie Ihre eigenen Standardeinstellungen.
Sollten Sie den anderen Weg gehen: Sie können nicht das tun, Operationen auf eine null-Operanden, so müssen Sie versuchen, zu konvertieren von
bool?
zubool
. Der operator ?? ist hier sehr hilfreich:Bezüglich der "null-coalescing operator" ?? :
wenn a, b und c sind alle
null
d dann wird-1
. Wenn jemand von Ihnen nicht null ist, wird der erste Wert verwendet.Bin ich nur zu raten, können Sie versuchen,
&&
mitbool
aber wenn Sie==
es ist immer falsch. Beachten Sie, dass das Ende mit... == false))
geben würde, die gleichen Antworten.Den
&&
operation ist nicht definiert fürnull
s. Daher müssen Sie sicherstellen, dass die beiden booleans sind keine null-Werte zulässt, und der einfachste Weg das zu tun ist, rufen Sie dieGetValueOrDefault()
Methode der nullable boolean.Wenn der Zweck der CheckProjectPath Funktion ist die Validierung einen Weg, den ich sehe keinen Grund, warum das Ergebnis sollte
bool?