Выйти из пустого метода? - PullRequest
28 голосов
/ 18 января 2012

У меня есть этот метод (модифицированный код):

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 возвращает нас из метода, верно?

Ответы [ 9 ]

42 голосов
/ 18 января 2012

Это строго эквивалентно, и вторая версия - путь:)

7 голосов
/ 18 января 2012

Да, это совершенно нормально.

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

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

4 голосов
/ 18 января 2012

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

3 голосов
/ 18 января 2012

Да, оператор return завершает метод.

2 голосов
/ 18 января 2012

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

1 голос
/ 18 января 2012

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

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

1 голос
/ 18 января 2012

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

1 голос
/ 18 января 2012

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

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

1 голос
/ 18 января 2012

Да, ваши предположения верны.

Для некоторого фона, узнать о двойственность .

...