2009-03-17 11 views
17

Es wäre wirklich nett, wenn C# einen ?? = Operator erlaubt. Ich habe mich die häufig folgende Schreiben gefunden:Ein Null-Koaleszenz-Zuweisungsoperator?

something = something ?? new Something(); 

Ich würde eher schreiben Sie es wie folgt aus:

something ??= new Something(); 

Gedanken? Neue Spracherweiterungen sind von Natur aus kontrovers.

+0

Ich würde vermeiden, zu viele eher obskure Konstrukte in die Sprache zu packen, wenn ich C# Chefarchitekt wäre ..... Plus, der ?? == Operator scheint wirklich nicht so intuitiv zu mir, ganz ehrlich. –

+2

duplizieren http://stackoverflow.com/questions/558010/why-cant-i-do-in-c –

+3

Es wäre nicht neu, es würde die Abkürzung Konvention anderer Operatoren –

Antwort

1

Ich bin ehrlich gesagt auf der = ++ Operator in erster Linie zerrissen, und seine Verwendung ist ziemlich weit verbreitet und üblich. Aus Gründen der Übersichtlichkeit sind die zusätzlichen Zeichenpaare, die Sie benötigen, wahrscheinlich nicht die Änderung der Sprache wert, um ein ?? hinzuzufügen. Wenn dies eine Abstimmung wäre, würde ich gegen diese Änderung der Sprache stimmen (gute Frage, schlechte Idee. :-)

Ich habe das nicht versucht, aber könnten Sie ?? = zu einem Makro im Visual Studio zuordnen? hat das gerade für dich geschrieben?

+2

Es gibt keinen '= ++' Operator. Ich nehme an, du meinst den '+ =' zusammengesetzten Zuweisungsoperator. In diesem Fall gibt es einen Grund für seine Einbeziehung, da "a + = b" nicht nur eine Kurzschrift für "a = a + b" ist. Werfen Sie einen Blick auf https://msdn.microsoft.com/en-us/library/aa691316%28v=vs.71%29.aspx als Ausgangspunkt für weitere Informationen. – 0b101010

+0

in der Sprache wird es nur eine syntaktische Zucker sein, es bedeutet, wenn kompilieren, wird der Compiler im normalen, wie viele andere Betreiber "erweitern". Es ist keine so schlechte Bitte. Jedenfalls ist die Idee von VS-Makro auch gut, aber nicht die wirkliche Antwort. – Raffaello

2

Ich würde sagen, dass der ?? Operator und genauer das obige Muster ist nicht so häufig und so ein neuer Operator ist Overkill.

+0

Meine Gedanken genau. –

+0

wäre es syntaktischer Zucker, nichts mehr, nichts neues .... – Raffaello

2

Ich bin nicht unbedingt gegen den Betreiber, aber diese Art der Variablenwiederverwendung fühlt sich einfach nicht wie der "richtige Weg" zu mir an. Fehler, die offensichtlich NULL-Zeiger haben sollten am Ende besiedelte mit unerwarteten Daten und die Arbeit in einer unerwarteten Art und Weise, etc ....

2

Als ?? Stenografie ist in einer Art und Weise des ternären Operators für die Verwendung von ähnlich ist:

(myObject != null) ? myObject : somethingElse; 

eher als Kurzschrift für eine arithmetische Operation, glaube ich nicht, dass eine ??= Operation eine gute Passform ist. Es ist ein bedingter Operator.

+0

Wenn Sie die Nullbedingung des Zustands einer Variablen überprüfen und sie sich nur im Falle von null zuweisen möchten, ist es eine gute Anpassung. z.B. '_date = _date ?? Wert; ' – Rice

14

Andere Programmiersprachen wie Ruby diese verwenden sehr häufig:

something ||= Something.new 
4

Wenn ‚etwas‘ ein eigenes Feld für eine Eigenschaftenaccessor ist, können Sie folgendes tun .... das würde führen Sie die Zuordnung, wenn die Das Feld ist null.

private Something something; 
public Something Something 
{ 
    get 
    { 
     return something ?? (something = new Something()); 
    } 
} 
+0

Dies entspricht nicht der Absicht des Betreibers. Die Absicht, die Frage zu stellen, war zu fragen, ob es Pläne gab, einen ?? = Operator einzubauen, und das würde Sinn ergeben. Das Codebeispiel oben strafft den Code nicht und muss für jeden Fall geschrieben werden. – CodeMonkeyKing

2

Ich implementierte das für PHP7. Es ist jetzt im RFC-Vorschlagsstadium. https://github.com/php/php-src/pull/1795

Eigentlich war es eine Frage über Null Koaleszenz-Operator in PHP7. Überprüfen Sie dies:

$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? ‘value’; 
I want to check if some var is null and if the same var is null set the same var to ‘value’. 

Daher wiederhole ich die gleiche Variable nach dem gleichen Operator, das fühlt sich nicht richtig an.

Also ich fühle, dass wir einen anderen Operator wie "?? =" benötigen, ähnlich wie + =;

$ this-> Anfrage-> Daten ['Kommentare'] ['user_id'] ?? = 'Wert'. Wenn also die Variable null ist, wird sie auf 'Wert' gesetzt und bleibt ansonsten gleich.

In dieser Pull-Anfrage habe ich versucht, dies zu implementieren.

$ sapi/cli/php -r '$num = null;$num ??= 5; echo $num;' 
5 
+0

Gut zu wissen, aber die ursprüngliche Anfrage war dafür in C# zu tun. – CodeMonkeyKing

+0

https://wiki.php.net/rfc/null_coalesce_equal_operator –