Похоже, что метод имеет отступ для обработки значения, полученного из элемента checkbox
HTML. Если для флажка не указано значение, по умолчанию используется значение "on"
. Если этот флажок не установлен, то в данных формы его значение вообще отсутствует, поэтому чтение ключа из Request.Form
дает нулевую ссылку.
В этом контексте метод правильный, хотя и довольно ужасный из-за использования антишаблона if-condition-then-true-else-false
. Также ему нужно было дать имя, более подходящее для его конкретного использования, например GetCheckboxValue
.
Ваше переписывание метода является правильным и правильным. Поскольку значение не зависит от культуры, преобразование значения в верхний регистр не должно использовать текущую культуру. Так что переписать даже лучше, чем тот, который вы предложили, будет:
return value != null && value.ToUpperInvariant == "ON";
(Методы, не зависящие от культуры, также немного быстрее, чем методы, использующие конкретную культуру, поэтому нет причин не использовать их.)
Кстати, это не выражения
оценивается изнутри наружу?
Если бы это были вызовы методов, чтобы все выражения были фактически вычислены, они бы это сделали, поскольку внутренний вызов должен быть выполнен для оценки параметров внешнего вызова.
Однако второй и третий операнды условного выражения вычисляются только в том случае, если они используются, поэтому выражения оцениваются извне и вовнутрь. Внешнее условие оценивается первым, чтобы решить, какой из операндов он будет оценивать.