dass es einige Mitglieder gibt, die den kannten, war schon klar. Ich denke nur, dass der Operator unbekannter ist, als er es verdient. Deshalb habe ich den Beitrag geschrieben.
Bis vor ner Weile kannt ich den echt net, weil man den doch eher weniger brauch und der auch kaum irgendwo erwähnt wird.
Und das obwohl ja nullable Types ne interessante Neuerung waren für .Net 2.0 und der Operator für diese eigentlich eingeführt wurde.
Hier ne ergänzende Erklärung:
int? y = ...;
int x = 0;
.
.
.
x = y; // Zuweisung 1
x = (int) y; // Zuweisung 2
x = y ?? 1; // Zuweisung 3
Zuweisung 1 ergibt nen Compilerfehler da implizit kein cast möglich ist, aber es gibt einen expliziten cast -> Zuweisung 2.
Zuweisung 2 kann funktionieren wenn y einen Wert hat, ist y aber null gibts ne InvalidOperationException was auch net so dolle ist.
Deshalb hat man den ?? Operator eingeführt der x nur dann y zuweist wenn y != null ist oder wenn y = null ist, dann den defaultwert.
Huch, nein, den kannte ich noch nicht. Vor langer Zeit hab ich mir mal die Schlüsselwort-Liste für C# vorgenommen und alle Schlüsselwörter genau erforscht. Aber an Operatoren hab ich da nicht gedacht.
Zum -Operator hat mir vor Jahren ein Arbeitskollege mal gesagt, ich sollte das besser nicht verwenden (weiß nicht, ob das damals noch in C++ war - gab's den da auch schon?), weil ihn viele nicht kennen und den Code dann nicht verstehen würden. Find ich ein doofes Argument, dann sollen sie die Sprache halt besser lernen. Ist ja alles übersichtlich dokumentiert. Wo diese Abkürzungen die Lesbarkeit verbessern, also insbesondere bei kurzen Ausdrücken von max. einer halben Zeile, verwende ich sie gerne. Wenn man mehrere Zeilen dafür braucht, ist ein if u.U. doch besser geeignet.
if (a==b) lalala; else{tralala}
a=b ? lalala:tralala;
// so hab ich das jetzt mal verstand das es funktionieren soll
// 10 x mal einen Tastendruck gespart :)
Naja also leider macht mein VS-Express das ? nicht farbig und man muss logisch im Kopf zurück springen weil das ? Welches die Übergabe von zuvor zur Bedingung macht erst später kommt (^^). Während das if, das ganz links steht sofort die logik des darauf folgenden Teils ändert. Haarspalterrei, aber das es nicht farbig wird ist stört mich am meisten habs versucht in den Optionen zu ändern aber geht irgendwie nicht.
? : ist kein Ersatz und auch keine Kurzform von if () else, sondern eine Möglichkeit innerhalb eines Ausdrucks eine Verzweigung zu verwenden. Das hat z.B. als Konsequenz, dass linker und rechter Ausdruck vom Doppelpunkt den gleichen/kompatiblen Ergebnistyp haben muss und einiges mehr. Es geht hier nicht um das Sparen von Tastendrücken.
Außerdem geht es hier eigentlich um ?? und nicht so sehr um ? :.
Ich bleib aufjedenfall im if-Team glaub das ?-Team wird diese Saison absteigen.
Also in den zwei Büchern die ich habe stand bisher noch nichts von ? und ?? und auch sonst kam mir das noch nicht unter. Aber ich bin ja auch noch eine C# Neugeborenes
Hatte mich nur interessiert, weil ich sehr viel if benutze, aber wenns damit nix zu tun hat will ich euch das glauben. =)
der ? : operator ist nicht für bedingte ausführung sondern für bedingte zuweisung, etwa wie wenn du schreiben könntest (pseudocode aus Amiga-E *grins*)
int a = 1;
string b = IF (a == 1) THEN "Hello World" ELSE "Hello Uncle Sam";
und eigentlich wärs auch lesbarer als ?... wurde halt aus C übernommen. ich würd oberes dem ? vorziehen wenns möglich wär. dann hätt man auch ein syntax highlightetes if else...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von 0815Coder am .
weiss vielleicht jemand warum das nicht funktioniert:
...
private int _X;
...
public int X
{
get { return _X; }
set { _X = _X ?? value; } //Hier tritt der Fehler auf
}
...
Zitat
Der Operator "??" kann nicht auf Operanden vom Typ "int" und "int" angewendet werden.
ich wollte eigentlich eine Variable machen, die einmal (von aussen) definiert werden kann und als ich diesen thread gesehen habe, dachte ich eigentlich müsste es mit dem ??-Operatoren doch gehen...^^
mfG b3nj
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von B3nj am .
Wow hab ich auch noch nicht gekannt, hab mir eine Generische Methode geschrieben, die das für mich mach, ala Access nz.
Danke für den Hinweis
Liebe Grüße
LastGentleman
"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein
Ich finde dass es eine tolle Abkürzung ist, als ich mitbekommen habe, dass es so etwas gibt: x != null ? "ok" : "fehler", dachte ich, cool. Schnelle Zeile Code und man kann schön erkennen was getan wird, wenn man weiß was das heißt.
Das war schon mal eine Abkürzung.
Aber ich glaube kaum dass ich das häufig verwenden werde, weil mir das doch zu kryptisch ist, es beim Lesen nicht eindeutig hervorgeht, was ?? macht.
Gibts diesen Operator auch außerhalb der C# Welt?
Dass es ? seit C oder zumnindest schon länger gibt, dachte ich mir so ziemlich, kennen tu ich es aber erst seit etwa einem Jahr.
Dennoch finde ich, dass ?? mh, naja.. wie gemütlich sollen es die C# Programmierer denn noch serviert bekommen So denke ich nun über manche Neuerungen, wie diese, die praktisch sind, aber irgendwie fremd sind (
wenn man viel mit NullableTypes arbeitet, wird man die "Gemütlichkeit" zu schätzen wissen. Davon abgesehen ist es doch ein Nutzen, wenn eine Programmiersprache das Programmieren vereinfacht.
Sicher muss man beim Sprachdesign auch immer darauf achten, dass es zu keiner Inflation von Schlüsselworten und Operatorsymbolen kommt. Die Gefahr sehe ich allerdings hier nicht. Ich halte ?? für eine sinnvolle Ergänzung und durch die Nähe zu auch leicht zu merken.