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

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

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

Ответ 1

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

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

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

Ответ 2

может быть, просто используйте

isAdmin = isAdmin || IsGroupAdmin()

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