Я пару раз видел что-то вроде следующего... и я ненавижу это. Это в основном "обманывание" языка? Или... вы считаете, что это "нормально", потому что значение 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 exceptions... в разных местах кода. Поэтому, когда я увидел вышеуказанный код, в дополнение к все остальное, мое разочарование ушло оттуда.)