Я натолкнулся на следующее выражение в чужой код. Я думаю, что это ужасный код по ряду причин (не в последнюю очередь потому, что он не учитывает bool.TrueString и bool.FalseString), но мне любопытно, как компилятор его оценит.Корректная оценка выражения
private bool GetBoolValue(string value)
{
return value != null ? value.ToUpper() == "ON" ? true : false : false;
}
Редактировать Кстати, не являются вычисленных выражений изнутри-наружу? В этом случае, какая точка проверки значения! = Null после вызова value.ToUpper(), который будет генерировать исключение с нулевой ссылкой?
Я думаю, что следующее является правильным (намеренно) многословным версия (я никогда не оставить его, как это: D):
if (value != null)
{
if (value.ToUpper() == "ON")
{
return true;
}
else // this else is actually pointless
{
return false;
}
}
else
{
return false;
}
который может быть сокращен до:
return value != null && value.ToUpper == "ON";
ли это правильное переписывание выражения?
Я думаю, что C# будет оценивать первое условие, и только если это правда это будет оценивать второе условие (value.ToUpper == «ON») , поэтому он будет оценивать извне. –