Так много ответов ... Я просто хочу разбить это немного подробнее:
p.Enabled = p.Enabled != true;
Семантически эквивалентно:
var IN = p.Enabled;
var OUT = IN != true;
p.Enabled = OUT;
Итак:
p.Enabled -> IN IN != true OUT -> p.Enabled
--------------- ------------- ----------------
true true != true false
false false != true true
(if nullable) null null != true true
Таким образом, из таблицы Truth видно, что это тот же *, что и логический оператор not (!
) и может быть переписан как:
p.Enabled = !p.Enabled;
(Я полагаю, что большинство [опытных] программистов предпочитают эту последнюю форму, поскольку это довольно распространенная идиома.)
Удачного кодирования.
* Обратите внимание на добавление null
в качестве третьего состояния ввода в случае типов bool?
(он же Nullable<bool>
). (Спасибо, Томас Мэйфилд; -)