C# C“放置”;Return";变成一个函数?

C# C“放置”;Return";变成一个函数?,c#,control-flow,C#,Control Flow,有没有办法从函数内部操纵C#中的程序流 我的意思是在C++中可以放置类似的东西。 #define Verify(x) if(x==null) return; 或 放入宏中,并将Verify(x)置于函数中的任意位置。在本例中,如果满足某些条件,宏可以退出函数。 但在C#中,您可以将验证放在函数中,函数可能是内联的,但您始终必须以 if (Verify(x)) return; 。所以问题是,除了异常之外,还有什么方法可以操纵调用函数的控制流,使其成为被调用函数?防止无效条件的通常方法是在方法体

有没有办法从函数内部操纵C#中的程序流

我的意思是在C++中可以放置类似

的东西。
#define Verify(x) if(x==null) return;

放入宏中,并将Verify(x)置于函数中的任意位置。在本例中,如果满足某些条件,宏可以退出函数。 但在C#中,您可以将验证放在函数中,函数可能是内联的,但您始终必须以

if (Verify(x)) return;

。所以问题是,除了异常之外,还有什么方法可以操纵调用函数的控制流,使其成为被调用函数?

防止无效条件的通常方法是在方法体的开头安装一个guard子句。您可以在本文中找到关于我们为什么需要保护条款以及如何实现它们的完整解释:


我还举办了一次关于防御性编码的网络研讨会,您可以在这里找到录制的会话:

我非常不喜欢在宏中看到控制流语句或以其他方式隐藏。不要这样做。例外是一种方法。但是例外有很多开销。你说的开销是什么意思?异常不用于控制流,但用于指示错误条件,超过该条件无法执行函数。抛出异常并不只是为了将执行转移到其他地方,只需使用c#way并返回即可。这就是c#的用法。不要对控制流使用异常。当然没有“安全”的方法来实现它,呵呵。
if (Verify(x)) return;