Выйти из метода пустоты?

У меня есть этот метод (измененный код):

public static void PublishXmlForCustomTypes(MyOwnClass DefaultOutputInformation)
{
    if (DefaultOutputInformation != null)
    {
        ///lot of code
    }
}

и весь мой код находился внутри оператора if и, подумав об этом, я изменил на это:

public static void PublishXmlForCustomTypes(MyOwnClass DefaultOutputInformation)
{
    if (DefaultOutputInformation == null)
    {
        return;
    }
    ///lot of code
}

Насколько я тестировал, он кажется строго эквивалентным, но действительно ли это так? Я имею в виду, что выражение "return" выводит нас из метода правильно?

Да, это абсолютно нормально.

Некоторые люди догматически придерживаются "одной точки выхода на один метод", что было подходящим, когда было довольно сложно сделать так, чтобы вы всегда делали правильную сумму очистки в конце функции на C, например. но в С# это не обязательно.

Лично я считаю целесообразным вернуться, как только вы узнаете, что выполнили всю работу, которую вы действительно хотите использовать в методе. Используйте операторы try/finally или using для выполнения любой дополнительной операции "очистка, однако я выхожу".

6
ответ дан 18 янв. '12 в 18:25
источник

да return выводит вас из метода; если у вас есть блок finally, и вы вызываете return из блока try, блок finally выполняется в любом случае.

4
ответ дан 18 янв. '12 в 18:25
источник

Да, возврат выйдет из кода. Как правило, хорошей практикой является первый шаг в функции проверки того, что параметры, которые были переданы, - это то, что вы думаете, и они выходят (через возврат или исключение), так что вы не делаете ненужной обработки только для должны быть прерваны позже в функции.

2
ответ дан 18 янв. '12 в 18:31
источник

Действительно, return выводит вас из метода, поэтому он эквивалентен первому используемому вами способу. Какой способ лучше зависит от вашего кода, хотя обычно я предпочел бы вторую версию.

1
ответ дан 18 янв. '12 в 18:25
источник

Глядя на пересмотренный код, второй путь. Будучи функционально эквивалентными, подумайте о случае, когда вы передали 4 разных переменных функции, которую вы хотите проверить. Вместо того, чтобы делать неприятный 4-уровневый оператор if (везде, второй метод позволяет очистить внешний вид кода и не добавлять лишние уровни скобок. Если вы пишете на C/С++, вы можете сделать это макросом, например VERYIFY_NOT_NULL (x), и сделать код приятным и аккуратным.

Считываемый/поддерживаемый код превосходит nano-секунды производительности в 99% случаев.

1
ответ дан 18 янв. '12 в 18:37
источник

Да, это точно то же самое, вы можете прочитать документацию MSDN о возврате ключевого слова, чтобы полностью понять, как это работает: http://msdn.microsoft.com/en-us/library/1h3swy84.aspx

Как решить, какой путь лучше: оба хороши, но вторая версия делает его более читаемым, потому что тогда весь ваш код не находится внутри блока if. Таким образом, вы можете увидеть, что условие действительно легко, а не читать весь код метода.

1
ответ дан 18 янв. '12 в 18:25
источник