У меня часто есть код, который выглядит примерно так:
if (itm != null)
{
foreach (type x in itm.subItems())
{
//dostuff
}
}
//do more stuff
В ситуациях, когда //do more stuff
опущен, очень легко избежать дополнительного цикла foreach. Извлекая область с помощью соответствующей команды (в зависимости от того, что происходит, это обычно означает оператор return
или continue statement
).
Этот тип вещей имеет тенденцию приводить к коду стрелки. В настоящее время у меня есть несколько способов справиться с этим:
- Используйте код типа
itm = itm == null ? itm.subItems() : emptyArray
- Разрешить код стрелки
- Используйте
goto
- Использовать зловещие хаки (обертывание всего, если утверждение во всем, в объеме, а затем вырваться из него). На мой взгляд, злобные хаки в основном эквивалентны
goto
, за исключением более уродливых и трудных для чтения, поэтому я не считаю это допустимым решением. - Рефакторинг некоторых фрагментов в новые методы. На самом деле существует несколько случаев, когда это, вероятно, хорошее решение, но в основном это не подходит, поскольку нулевые ссылки в основном являются условиями ошибки из MS-функций.
Кто-нибудь хочет предложить ответ на то, какие подходы считаются предпочтительными?