Я видел что-то вроде следующего пару раз ... и я ненавижу это. Это в основном «обманывает» язык? Или ... вы считаете, что это 'нормально', потому что IsNullOrEmpty вычисляется первым, все время?
(Мы могли бы поспорить, должна ли строка быть NULL, когда она выходит из функции, но на самом деле это не вопрос.)
string someString;
someString = MagicFunction();
if (!string.IsNullOrEmpty(someString) && someString.Length > 3)
{
// normal string, do whatever
}
else
{
// On a NULL string, it drops to here, because first evaluation of IsNullOrEmpty fails
// However, the Length function, if used by itself, would throw an exception.
}
EDIT:
Еще раз спасибо всем за напоминание об этом фундаментальном языке. Хотя я знал «почему» это сработало, я не могу поверить, что не знал / не помнил название концепции.
(На случай, если кому-то понадобится какой-то фон .. Я столкнулся с этим при устранении неполадок исключений, генерируемых строками NULL и исключениями .Length> x ... в разных местах кода. Поэтому, когда я увидел приведенный выше код, в дополнение все остальное, мое разочарование перешло оттуда.)