Почему я не могу сделать ?? = в C #? - PullRequest
16 голосов
/ 17 февраля 2009

Я часто ловлю себя на том, что делаю:

foo = foo ?? x;

Почему я не могу сделать:

foo ??= x;

Редактировать : Я знаю, что это не часть языка ... Мой вопрос "почему нет"? Я считаю необходимость повторять "foo" неприятной и потенциально подверженной ошибкам. Это выглядит так же безобразно, как:

foo = foo + x;

Ответы [ 13 ]

2 голосов
/ 17 февраля 2009

Главным образом потому, что + =, - = и т. Д. Были добавлены в значительной степени как мысли для поддержания совместимости с C & C ++. (*) Поскольку ?? не является частью C или C ++, не было необходимости добавлять дополнительный оператор.

(*) Обратите внимание, что в C ++ при определении операторов для класса обычно определяется оператор + = (), а затем реализуется оператор + () на его основе. (Это вообще самый эффективный способ). Однако в C # реализован оператор +, и компилятор автоматически добавляет оператор + = на основе oper +. Вот почему я говорю, что операторы + = являются задним числом.

1 голос
/ 17 февраля 2009

Этот стиль выражения выглядит как ленивый груз от получателя свойства. В этом случае я бы выбрал этот синтаксис

private Foo myFoo;
public Foo MyFoo
{
    get
    {
        return myFoo ?? (myFoo = new Foo());
    }
}
0 голосов
/ 17 февраля 2009

Потому что в C # такого оператора ?? нет.

Хотя + = может показаться, что два оператора представлены с разным синтаксисом, это всего лишь один оператор.

...