Ich kannte den Operator auch nicht, finde ihn aber ziemlich geil, gerade bei der Auslesung assoziativer Listen ist er ziemlich nützlich. Danke herbivore
kennt jemand von euch eigentlich den Namen des Operators. Also der operator+ ist der Additions-Operator oder der operator>> ist der (Rechts)-Shift-Operator, aber wie heißt der ??-Operator?
In der :rtfm: Doku hat er keinen Namen (außer eben ??-Operator) und bei Google lässt sich so schlecht danach Suchen:
Zitat
Google erkennt keine Sonderzeichen, wie Ausrufezeichen, Fragezeichen oder das Zeichen @. Diese Zeichentypen kommen so häufig vor, dass deren Berücksichtigung die Bereitstellung der Suchergebnisse erheblich verlangsamen würde.
Ich habe mir, als ich vor bald 2 Jahren in ein C#-Projekt reinrutschte zunächst das C#-Buch durchgelesen und dann noch im Internet nach Neuerungen gesucht und war begeistert von dem ??.
Sehr nützlich!
Was ich noch gerne hätte wäre folgende Erleichterung:
void MyMethod(object param)
{
if (param == null) throw new ArgumentNullException("param");
...
}
hätte ich gerne vereinfacht in
void MyMethod(object !param)
{
...
}
oder so ähnlich.
Sprich: Ich hätte gerne die Möglichkeit einer Markierung von Parametern, die Aussagt, daß diese nicht null sein dürfen und wenn sie es doch sind eine ArgumentNullException geworfen wird, ohne das ich den Code Explizit schreiben muß.
Das spart zum einen Schreibarbeit und zum anderen kann ich, wenn ich mir die Definition einer Methode ansehe (was man ja ständig tut, wenn man Intellisense nutzt) direkt erkennen, ob ein Parameter auch null sein darf oder nicht und muß nicht erst die Doku lesen...
@ T-Man
Genau das wollt ich auch grad sagen Ist halt der einzige ternäre Operator, sonst würd er wohl auch anders heißen. Dann könnt man ?? auch binärer Operator schimpfen, nur gibts davon halt ne ganze Menge
Aber naja, "Not Null" triffts ja nicht hundertprozentig - ich würd ihn eher "Default when Null" nennen, oder wenns nicht funktional beschreibend sein soll: "DQM(Double Question Mark) - Oder Deutsch: DFZ" *gg* Ich mag Abkürzungen
was T-Man sagt richtig ist, richtig: ternär (3) bezieht sich wie binär (2) und unär (1) nur auf die Anzahl der Argumente. Der -Operator nennt man auch bedingte Bewertung, siehe Bitte Erklärung zu (...) ? ... : ...
Hallo T-Man,
[is] not null-Operator scheint aber schon durch SQL in einem etwas anderen Sinn belegt zu sein.
Hallo talla,
deine Namensvorschläge scheinen sich zumindest wenn man google trauen darf noch nicht durchgesetzt zu haben. :-)
was die ArgumentNullException kann ich zwar nicht mit (object !param) dienen, aber doch zumindest mit einem Ansatz, bei dem man für die Prüfung keinen Code schreiben sondern nur ein Attribut angeben müsste:
Original von herbivore
deine Namensvorschläge scheinen sich zumindest wenn man google trauen darf noch nicht durchgesetzt zu haben. :-)
Dann lasst uns das gute Ranking von mycsharp bei google ausnutzen um für diesen Operator eine Bezeichnung zu prägen Zumindest ne deutsche, die englische C# Spec hat natürlich einen dafür :
Zitat
The ?? operator is called the null coalescing operator.
mir geht es weniger um die Kürze, als vorallem darum, daß ich schon an der Definition erkenne, daß der Parameter nicht null sein darf.
Man kann IdR die Funktionsweise einer Methode an Ihrem Namen und den Namen der Parameter erraten. Das lesen der Doku kann man sich so oftmals sparen. Was aber häufig unklar ist, ist ob ein Parameter auch null sein darf. Vorallem wegen dieser Info muß ich häufig in die Doku sehen.
Ich habe z.B. Regex.IsMatch(...) zunächst intuitiv benutzt und bin davon ausgegangen, daß null wie ein Leerstring behandelt wird, was keider nicht so ist. Wären die Parameter entsprechend markiert hätte ich es gleich gesehen...
Was den Namen des ?? Operators angeht, würde ich sagen ist 'Default when null' nicht ganz so gut, das es ja nicht unbedingt ein Default-Wert ist den man da als zweites Argument angibt.
Vielleicht "Other when null" (kurz "own" für Akronymphile)?
Das "Not Null" nicht gut ist, ist mir klar, aber den habe ich mir auch nicht bewußt überlegt, der ist einfach in meinem Kopf entstanden und benutze ihn auch nicht wenn ich mit anderen kommuniziere.
Ich kannte den Operator bislang auch noch nicht, denke aber nicht, dass er bei mir oft Verwendung finden wird. Genial wärs gewesen bei einem Ähnlichen Scenario. Nämlich wenn er auch bei DBNull.Value funktionieren würde.
Schön kurz pägnant. Aber ich find das auch net eindeutig, klar gibt er dem Objekt das Null ist einen Wert, aber NullWert hört sich für mich eher nach nem Operator an der irgendwas nullt. Mag erstmal bissle sinnfrei erscheinen, aber in XAML z.B. gibts ja mit der Null Markup Extension etwas ähnliches weil "Null" in XAML halt net eindeutig ist ob man nun den String Null möchte oder das Objekt null zuweisen will.
Aber trotzdem finde ich des bisher als besten Vorschlag da schön kurz und an sich treffend wenn man weiß was der Operator macht.