Я видел документацию и ответы (1) (2), которые пытаются объяснить, что такое оператор |= и как он работает, и хотя на базовом уровне это имеет смысл... Я не совсем понимаю, почему и как он выполняет то, что делает.
В пояснениях говорится, что a |= b
эквивалентно a = a | b
, но я не понимаю, как он оценивает, дать ли a
значение самого себя (a
) или значение b
. Насколько я понимаю, "или" означает, что может быть одно из двух, но не указывает, какое именно.
В Visual Studio я использую расширение под названием Refactoring Essentials, которое предлагает заменить часть моего кода строкой с оператором |=, и хотя код работает с оператором, я не понимаю, как он это делает. , что побудило меня попытаться изучить его в Интернете (и, как следствие, задать этот вопрос).
Мой код пошел от
if (MessageBox.Show("Are you sure you want to cancel this operation?", "Confirm Cancel", MessageBoxButton.YesNo, MessageBoxImage.Exclamation, MessageBoxResult.No) == MessageBoxResult.No)
{
e.Cancel = true;
}
to
e.Cancel |= MessageBox.Show("Are you sure you want to cancel this operation?", "Confirm Cancel", MessageBoxButton.YesNo, MessageBoxImage.Exclamation, MessageBoxResult.No) == MessageBoxResult.No;
и это все еще работало. Хотя я предполагаю, что e.Cancel
определяется на основе оценки MessageBox.Show(...) == MessageBoxResult.No
, я не знаю, зачем там нужен оператор |=. Почему бы просто не использовать стандартный оператор присваивания (=), поскольку результатом выражения является логическое значение, а e.Cancel
принимает логическое значение? А как насчет использования условного оператора (?:)? Как |= соотносится с этим (если вообще имеет)?