Bin auf diese Codezeile gestoßen:
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
Was bedeuten die beiden Fragezeichen, handelt es sich um eine Art ternären Operator? Es ist schwer, in Google nachzuschlagen.
Bin auf diese Codezeile gestoßen:
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
Was bedeuten die beiden Fragezeichen, handelt es sich um eine Art ternären Operator? Es ist schwer, in Google nachzuschlagen.
Ich habe nur die Schreibweise von "ternär" korrigiert, aber der Operator, den Sie meinen, ist der bedingte Operator. Es ist zufällig der einzige ternäre Operator in C#, aber irgendwann kommt vielleicht ein weiterer hinzu, dann ist "ternär" zweideutig, aber "bedingt" nicht mehr.
Andere haben die Null Coalescing Operator
recht gut. In Fällen, in denen ein einziger Test auf Null erforderlich ist, kann die verkürzte Syntax ??=
kann die Lesbarkeit verbessern.
Legacy-Null-Test:
if (myvariable == null)
{
myvariable = new MyConstructor();
}
Unter Verwendung des Null-Koaleszenz-Operators kann dies geschrieben werden:
myvariable = myvariable ?? new MyConstructor();
die auch mit der verkürzten Syntax geschrieben werden kann:
myvariable ??= new MyConstructor();
Manche finden sie besser lesbar und prägnanter.
Wenn Sie mit Ruby vertraut sind, ist die ||=
scheint ähnlich wie C#s ??
zu mir. Hier ist etwas Ruby:
irb(main):001:0> str1 = nil
=> nil
irb(main):002:0> str1 ||= "new value"
=> "new value"
irb(main):003:0> str2 = "old value"
=> "old value"
irb(main):004:0> str2 ||= "another new value"
=> "old value"
irb(main):005:0> str1
=> "new value"
irb(main):006:0> str2
=> "old value"
Und in C#:
string str1 = null;
str1 = str1 ?? "new value";
string str2 = "old value";
str2 = str2 ?? "another new value";
x ||= y
entzuckert zu etwas wie x = x || y
Así que ??
ähnelt eigentlich mehr dem einfachen ||
in Ruby.
Beachten Sie, dass ??
kümmert sich nur um null
während die ||
Operator in Ruby ist, wie in den meisten Sprachen, eher ein null
, false
oder alles, was als boolescher Wert betrachtet werden kann, mit einem Wert von false
(z. B. in einigen Sprachen, ""
). Dies ist weder gut noch schlecht, sondern lediglich ein Unterschied.
Wie in zahlreichen Antworten richtig angemerkt wurde, handelt es sich dabei um den "Null-Koaleszenz-Operator" ( ?? ), und da wir gerade davon sprechen, sollten Sie sich auch seinen Cousin, den "Null-Conditional Operator", ansehen ( ?. o ?[ ) ist ein Operator, der oft in Verbindung mit ??
Wird verwendet, um auf Null zu testen, bevor ein Mitgliederzugriff durchgeführt wird ( ?. ) oder Index ( ?[ ) Betrieb. Diese Operatoren helfen Ihnen, weniger Code für die Handhabung von Null-Prüfungen zu schreiben, insbesondere beim Abstieg in Datenstrukturen.
Zum Beispiel:
// if 'customers' or 'Order' property or 'Price' property is null,
// dollarAmount will be 0
// otherwise dollarAmount will be equal to 'customers.Order.Price'
int dollarAmount = customers?.Order?.Price ?? 0;
auf die alte Weise ohne ?. et ?? dies zu tun, ist
int dollarAmount = customers != null
&& customers.Order!=null
&& customers.Order.Price!=null
? customers.Order.Price : 0;
die ausführlicher und umständlicher ist.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
70 Stimmen
Es ist definitiv no ein ternärer Operator - er hat nur zwei Operanden! Er ist ein bisschen wie der bedingte Operator (der ist ternär), aber der Null-Koaleszenz-Operator ist ein binärer Operator.
104 Stimmen
Ich habe es in einem Vorstellungsgespräch erklärt, in dem der potenzielle Arbeitgeber zuvor Zweifel an meinen C#-Fähigkeiten geäußert hatte, da ich zuvor eine Zeit lang beruflich mit Java gearbeitet hatte. Sie hatten vorher noch nie etwas davon gehört und stellten meine Vertrautheit mit C# danach nicht mehr in Frage :)
85 Stimmen
@Jon Skeet Seit dem Kerl, der die Beatles ablehnte, gab es keine derartigen Misserfolge bei der Anerkennung von Fähigkeiten mehr :-) Schicken Sie ihnen von nun an einfach ein Exemplar Ihres Buches mit einem Link zu Ihrem SO-Profil auf der Innenseite des Umschlags.
6 Stimmen
IainMH: Wenn Sie mich fragen, hatte ich keine ziemlich noch nicht mit dem Schreiben des Buches begonnen. (Oder vielleicht habe ich auch nur an Kapitel 1 gearbeitet - so was in der Art.) Zugegeben, eine Suche nach mir hätte schnell meinen Blog + Artikel etc. gefunden.
9 Stimmen
Re: letzter Satz in der Frage - für zukünftige Referenz, SymbolHound ist großartig für diese Art von Dingen z.B.. symbolhound.com/?q=%3F%3F&l=&e=&n=&u= (für alle, die misstrauisch sind - ich bin in keiner Weise verbunden, ich mag einfach ein gutes Werkzeug, wenn ich eines finde...)
7 Stimmen
Auf der Suche nach
C# ??
|C# '??'
|C# "??"
führt nicht zu den erwarteten Ergebnissen. Testet die Suchmaschine, ob C# Null ist, und sagt: Nein - es ist tatsächlichC#
- Hier sind Ihre Ergebnisse fürC#
- Oje!6 Stimmen
@ppumkin Suchen Sie einfach nach
double question mark c#
in Google.