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.
Im einfachsten Fall werden zwei Fragezeichen als "Coalescing Operator" bezeichnet, der den ersten Nicht-Null-Wert aus der Kette zurückgibt.
Wenn Sie z.B. einen Wert von einem nicht löschbaren Objekt in einer Variablen erhalten, die nicht löschbar ist, dann können Sie diesen Operator verwenden. d.h..
int a = 1;
int? b = null;
a = b??0;
Das Ergebnis der obigen Gleichung wäre Null, da b Null ist und wir den Operator ?? zusammen mit Null verwendet haben, was bedeutet, dass 0 zurückgegeben wird, wenn und nur wenn b Null ist.
int a = 1;
int? b = 15;
a = b??0;
In der obigen Gleichung erhält a den Wert "15", weil b einen gültigen Wert hat und nicht null ist. Außerdem können Sie den Operator ?? nicht auf ein nicht löschbares Objekt anwenden.
In den obigen Beispielen habe ich ?? 0, es kann jedoch auch eine komplett neue Gleichung nach dem Operator ?? verwendet werden.
Wie zum Beispiel
a = b ?? ( x==1 ? 10 : 15)
Ich hoffe, das klärt Ihre Frage.
El ??
wird als Null-Koaleszenz-Operator bezeichnet. Er gibt den linken Operanden zurück, wenn der Operand nicht null ist; andernfalls gibt er den rechten Operanden zurück.
int? variable1 = null;
int variable2 = variable1 ?? 100;
Satz variable2
auf den Wert von variable1
wenn variable1
ist NICHT null; andernfalls, wenn variable1 == null
gesetzt variable2
auf 100.
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
ist gleichbedeutend mit
FormsAuth = formsAuth != null ? formsAuth : new FormsAuthenticationWrapper();
Aber das Tolle daran ist, dass man sie aneinanderreihen kann, wie andere Leute schon sagten. Die eine dünne nicht auf berührt ist, dass Sie tatsächlich verwenden können, um eine Ausnahme zu werfen.
A = A ?? B ?? throw new Exception("A and B are both NULL");
Es handelt sich um einen Null-Koaleszenz-Operator, der ähnlich wie ein ternärer Operator funktioniert.
a ?? b => a !=null ? a : b
Ein weiterer interessanter Punkt in diesem Zusammenhang ist, "Ein nullbarer Typ kann einen Wert enthalten, oder er kann undefiniert sein. . Wenn Sie also versuchen, einen nicht löschbaren Werttyp einem nicht löschbaren Werttyp zuzuweisen zuzuweisen, erhalten Sie einen Kompilierfehler.
int? x = null; // x is nullable value type
int z = 0; // z is non-nullable value type
z = x; // compile error will be there.
Um dies zu tun, verwenden Sie den Operator ??
z = x ?? 1; // with ?? operator there are no issues
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.