Почему в 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 ? а: б;
Конечно, на месте любой из этих переменных могут быть сложные выражения.
Вот ссылка: операторы объединения нулей