В этом случае, в чем разница использования | или используйте двойной || ?
if (char.IsNumber(e.KeyChar) | e.KeyChar == (char)8 | e.KeyChar == (char)Keys.Escape)
{
e.Handled = false;
return;
}
else
{
e.Handled = true;
return;
}
При использовании двойных операторов в случае ИЛИ происходит то, что он прекращает проверку остальных условий, если находит истинное.
В случае с & то же самое происходит, если он находит ложное условие
В вашем примере:
Здесь он проверяет, что три условия
но:
Если первое условие не выполняется, а второе выполняется, третье условие не оценивается и вводится «если».
Согласно Майкрософт:
При использовании
|
всех выражений как левых, так и правых. В то время как при использовании || он оценивается только слева направо.@Sr1871 сослался на ответ от SO/English, и есть ответ с выражением, которое может помочь:
Как уже объяснялось в принятом ответе, с помощью бинарного оператора
|
оцениваются все логические выражения.Напротив, с условным оператором
||
выполняется то, что известно как оценка "короткого замыкания" . То есть вычисление логических выражений останавливается, когда окончательный результат вычисления больше не может измениться, даже если другие выражения все еще вычислялись.В предложенном вами примере разница практически нулевая. Но разница заметна на этом очень распространенном примере:
В этом случае использование оператора
||
позволяет избежатьNullReferenceException
whenobj == null
, так как второе выражение в этом случае не вычисляется.Напротив, если бы использовался бинарный оператор
|
:...тогда да
obj == null
, вы получитеNullReferenceException
.Из-за этого очень редко используется бинарный оператор
|
с логическими выражениями. Чаще всего этот оператор используется с целыми значениями дляOR
побитового выполнения.