Я не программист на C #, но попробую.
В первом случае я бы сказал, что объекты не должны быть нулевыми. Если это неизбежно (обычно этого можно избежать), я бы использовал шаблон раннего возврата:
if ( objectA == NULL ) {
return;
}
// rest of code here
Второй случай, очевидно, нереалистичный код, но я бы, по крайней мере, сказал бы:
if ( isTrue && e > 1 ) {
DoStuff();
}
вместо использования двух отдельных if.
И в последнем случае я буду хранить строки для тестирования в массиве / векторе / карте и использовать эти контейнеры для выполнения поиска.
И, наконец, хотя использование цикломатической сложности - это «хорошо» (тм), и я использую его сам, есть некоторые функции, которые, естественно, должны быть немного сложными - проверка пользовательского ввода является примером. Я часто хочу, чтобы инструмент CC, который я использую (Source Monitor at http://www.campwoodsw.com - бесплатно и очень хорошо), поддерживал белый список функций, которые, как я знаю, должны быть сложными и которые я не хочу отмечать.