2017-02-18 4 views
-1

Есть ли способ управлять потоком программы в C# из функции?C# Помещение «Возврат» в функцию?

Я имею в виду C++ можно было разместить что-то вроде

#define Verify(x) if(x==null) return; 

или

#define Verify(x) if(x==null) goto _exit; 

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

if (Verify(x)) return; 

. Итак, вопрос в том, есть ли какой-либо иной способ, кроме исключений, манипулировать потоком управления вызывающей функцией как вызываемой функции?

+5

Я сильно не нравлюсь видя инструкции потока управления в макросах или иным образом скрытые. Не делай этого. Исключения - это путь. –

+0

Но исключение приходится много накладных расходов. –

+2

Что значит накладные расходы? Исключения не используются для управления потоком, но для указания состояния ошибки, за пределами которого нет возможности выполнить функцию. Вы не бросаете исключения только для того, чтобы переместить выполнение где-то еще. –

ответ

3

Обычный способ защиты от недействительных условий - установить положение охраны в начале тела метода. Вы можете найти полное объяснение о том, почему нам нужны сторожевых пунктах, и как реализовать их в этой статье: Why do We Need Guard Clauses?

Я также провел веб-семинар по оборонительному кодированию и вы можете найти записанный сеанс здесь: Advanced Defensive Coding Techniques

Смежные вопросы