C#中是否存在单行#if #endif写法?类似伪代码#if(foo, DoThat(); )
有没有更简便的单行写法替代C#里的
#if ... #endif? 哈哈,作为同样想少敲键盘摸鱼的程序员,太懂这种需求了!分两种情况给你说,看你要的是编译时条件还是运行时条件:
1. 要和#if一样的编译时效果(代码会被编译剔除)
其实原生预编译指令本身就支持单行写法!直接把#if、代码、#endif放同一行就行:
#if foo DoThat(); #endif
完全合法,和多行版的效果一模一样——编译时如果foo没定义,这段代码直接就被跳过了,不会出现在最终的程序集里。
2. 运行时条件判断(不需要编译时剔除代码)
如果你的场景不需要编译时移除代码,只是运行时判断要不要执行,那直接用单行if就够了,比预编译写法更简洁:
if(foo) DoThat();
这个写法和你伪代码里的if(foo, DoThat(); )几乎一致,少敲好几个字符!
小提醒:别搞混编译时和运行时的区别
#if是预编译指令:编译阶段就决定要不要保留这段代码,适合根据编译符号(比如DEBUG、自定义符号)来包含/排除代码的场景。- 普通
if是运行时判断:代码会被编译进程序集,只是运行时才决定是否执行,适合根据运行时变量值来判断的场景。
如果要执行多行代码还想写单行,也可以把大括号压缩到一行:
#if foo { DoThat(); DoThis(); } #endif // 或者运行时版本 if(foo) { DoThat(); DoThis(); }
内容的提问来源于stack exchange,提问作者Crimson
相关产品推荐
相关产品推荐

