2009-03-17 2 views
17

Было бы очень приятно, если бы C# допускал оператор? =. Я нашел себя написание следующие часто:Оператор присваивания нулевого коалесцента?

something = something ?? new Something(); 

Я предпочел бы написать это следующим образом:

something ??= new Something(); 

Мысли? Расширения новых языков всегда противоречивы по своей природе.

+0

Я бы избегал упаковки слишком многих довольно неясных конструкций в язык, если бы я был главным архитектором C# ..... Плюс, оператор ?? == действительно не кажется мне настолько интуитивным, честно говоря. –

+2

дубликат http://stackoverflow.com/questions/558010/why-cant-i-do-in-c –

+3

Это было бы не ново, оно соответствовало бы сокращенному соглашению других операторов –

ответ

1

Я честно разорван на операторе = ++ в первую очередь, и его использование довольно распространено и распространено. С точки зрения ясности, лишняя пара символов, которые вам нужны, вероятно, не стоит менять язык, чтобы добавить a =. Если бы это было голосование, я бы голосовал против этого изменения на языке (хороший вопрос, плохая идея. :-)

Я не пробовал это, но мог ли вы отобразить ?? = макрос в визуальной студии что просто переписал для вас?

+2

Нет оператора '= ++'. Я предполагаю, что вы имеете в виду оператор присваивания '+ ='. В этом случае есть причина, по которой его включение как 'a + = b' не просто сокращается для' a = a + b'. Взгляните на https://msdn.microsoft.com/en-us/library/aa691316%28v=vs.71%29.aspx в качестве исходного места для получения дополнительной информации. – 0b101010

+0

на языке это будет просто синтаксический сахар, это означает, что при компиляции компилятор будет «расширяться», что в обычном, как и у многих других операторов. Это не такая уж плохая просьба. Во всяком случае, идея макроса VS тоже хороша, но не реальный ответ. – Raffaello

2

Я бы сказал, что оператор ?? и более уместно вышеуказанный шаблон не так распространен, и поэтому новый оператор переборщил.

+0

Мои мысли точно. –

+0

это был бы синтаксический сахар, не более того, ничего нового .... – Raffaello

2

Я не обязательно против оператора, однако, такое переменное повторное использование просто не похоже на «правильный путь» для меня. Ошибки, которые должны были явными указателями NULL в конечном итоге заселены с неожиданными данными и работой в каком-то неожиданном образе, и т.д ....

2

?? Как это сокращение для использования тройного оператора в моде аналогична:

(myObject != null) ? myObject : somethingElse; 

, а не стенографию для арифметической операции, я не думаю, что операция ??= подходит. Это условный оператор.

+0

, если вы хотите проверить нулевое состояние состояния переменной и назначить его себе только в случае null, это хорошо подходит. например '_date = _date ?? value; ' – Rice

14

Другие языки программирования, такие как Ruby, использовать это довольно часто:

something ||= Something.new 
4

Если «нечто» является частным полем для недвижимости аксессору, вы можете сделать следующее .... это будет выполнять задание, если поле считается нулевым.

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

Это не касается намерений оператора. Цель моего вопроса состояла в том, чтобы спросить, есть ли планы включить оператор? = И это имеет смысл. Приведенный выше пример кода не упорядочивает код и должен быть написан для каждого случая. – CodeMonkeyKing

2

Я действительно реализовал это для PHP7. Сейчас он находится на стадии предложения RFC. https://github.com/php/php-src/pull/1795

На самом деле речь шла о нулевом коалесцирующем операторе в PHP7. Проверьте это:

$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’. 

Следовательно, я повторяю ту же переменную после равного оператора, это не кажется правильным.

Поэтому я чувствую, что нам нужен другой оператор типа «?? =», аналогичный + =;

$ this-> request-> data ['comments'] ['user_id'] ?? = 'значение'. Поэтому, если var имеет значение null, он имеет значение «value» и остается неизменным.

В этом запросе на растяжение я попытался реализовать это.

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

Замечательно знать, но исходный запрос был для этого в C#. – CodeMonkeyKing

+0

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

Смежные вопросы