Почему в C# нет операторов ||= или &&=?

У нас есть эквивалентные операторы присваивания для всех логических операторов, операторов сдвига, аддитивных операторов и всех мультипликативных операторов.

Почему логические операторы остались без внимания? Есть ли хорошая техническая причина, почему это сложно?

3 ответа

Решение

Почему логические операторы остались без внимания? Есть ли хорошая техническая причина, почему это сложно?

Они не Ты можешь сделать &= или же |= или же ^= если ты хочешь.

bool b1 = false;
bool b2 = true;
b1 |= b2; // means b1 = b1 | b2

|| а также && у операторов нет сложной формы, потому что, откровенно говоря, они немного глупы. При каких обстоятельствах вы хотите сказать

b1 ||= b2;
b1 &&= b2;

так, что правая часть не оценивается, если левая часть не изменяется? Кажется, что на самом деле только несколько человек будут использовать эту функцию, так зачем ее вставлять?

Для получения дополнительной информации о составных операторах см. Мою серьезную статью здесь:

http://blogs.msdn.com/b/ericlippert/archive/2011/03/29/compound-assignment-part-one.aspx

и последующую статью April-Fools здесь:

http://blogs.msdn.com/b/ericlippert/archive/2011/04/01/compound-assignment-part-two.aspx

Может просто использовать

isAdmin = isAdmin || IsGroupAdmin()

Я думаю, это частично потому, что a ||= b это немного сбивает с толку, потому что может быть две версии реализации: a = a || b, или a = b || a. И они действуют по-другому, потому что правая часть выражения иногда не оценивается.

В C# есть операторы с двойным вопросительным знаком (операторы объединения нулей).

Есть две его формы:

      a = b ?? c;

и

      a ??= b;

Первый из них оценивается как: a = b != null ? До нашей эры; Второе - это то, о чем вы спрашиваете: a = a != null ? а: б;

Конечно, на месте любой из этих переменных могут быть сложные выражения.

Вот ссылка: операторы объединения нулей

Другие вопросы по тегам