Ответ 1
Это строго эквивалентно, а вторая версия - путь:)
У меня есть этот метод (измененный код):
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
для выполнения любой дополнительной операции "очистка, однако я выхожу".
да return
выводит вас из метода; если у вас есть блок finally
, и вы вызываете return из блока try
, блок finally
выполняется в любом случае.
Да, возврат выйдет из кода. Как правило, хорошей практикой является первый шаг в функции проверки того, что параметры, которые были переданы, - это то, что вы думаете, и они выходят (через возврат или исключение), так что вы не делаете ненужной обработки только для должны быть прерваны позже в функции.
Да, ваши предположения верны.
Для некоторого фона узнайте о двойственности.
Да, это точно то же самое, вы можете прочитать документацию MSDN о возврате ключевого слова, чтобы полностью понять, как это работает: http://msdn.microsoft.com/en-us/library/1h3swy84.aspx
Как решить, какой путь лучше: оба хороши, но вторая версия делает его более читаемым, потому что тогда весь ваш код не находится внутри блока if. Таким образом, вы можете увидеть, что условие действительно легко, а не читать весь код метода.
Действительно, return
выводит вас из метода, поэтому он эквивалентен первому используемому вами способу. Какой способ лучше зависит от вашего кода, хотя обычно я предпочел бы вторую версию.
Да, оператор return завершает метод.
Глядя на пересмотренный код, второй путь. Будучи функционально эквивалентными, подумайте о случае, когда вы передали 4 разных переменных функции, которую вы хотите проверить. Вместо того, чтобы делать неприятный 4-уровневый оператор if (везде, второй метод позволяет очистить внешний вид кода и не добавлять лишние уровни скобок. Если вы пишете на C/С++, вы можете сделать это макросом, например VERYIFY_NOT_NULL (x), и сделать код приятным и аккуратным.
Считываемый/поддерживаемый код превосходит nano-секунды производительности в 99% случаев.