ich aus einem Artikel den folgenden Code habe, die ich nicht ganz den Unterschied in der sie in Bezug auf die Verwendung von Null-Operatoren verstehen:Null-Operator Verwirrung
if (memberAccessExpr?.Name.ToString() != "Match") return;
Dies ist zu mir, dass ich klar raten Sie, überprüfen Sie die memberAccessExpr
für null, und wenn es Null ist, gibt der Vergleich mit "Match" false zurück, ist das korrekt?
Die Verwirrung kommt mit dem zweiten:
if (memberSymbol?.ToString().StartsWith("System.Text.RegularExpressions.Regex.Match") ?? true) return;
Diese Codezeile erscheint mir ist so ziemlich das gleiche wie das erste, da ich eine einfache Prüfung null und dann eine Funktion aufrufen, die eine zurück Boolescher Wert (!=
vs. StartsWith
) ... Warum brauche ich einen zusätzlichen ?? - Operator hier und nicht in der ersten Zeile? Vielleicht hat es etwas mit dem impliziten == true
Vergleich zu tun, der ohne den ?? - Operator stattfinden würde?
Ich habe keine Ahnung, vielleicht Jungs Sie mich aufklären können:)
Cheers, Michael
okay, jetzt habe ich es bekommen, da der Ausdruck in der zweiten Zeile ein Nullable-bool..confusing stuff..but Dank für die gute Antwort lautet:) –
es wird ein Nullable-Bool da Sie verwenden Der Operator '? .' muss also in der Lage sein, sowohl einen 'Null'-Wert als auch das Ergebnis des Ausdrucks auf der rechten Seite zu halten (was ein' bool' ist), also 'bool?'.Beachten Sie, dass der Code nicht das ist, was der Compiler tut, es ist das, was ich Ihnen – Jcl
so grundsätzlich erklärt habe, wenn ein Aufruf irgendetwas auf einem Objekt mit?. Operator, der einfache Typen zurückgibt, kann ich das Ergebnis mit einem überprüfen? Operator, da es die NULL Wert des Typs wird, oder? –