• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#使用Conditional特性而不是#if条件编译

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

      概述

    #if/#endif 语句常用来基于同一份源码生成不同的编译结果,其中最常见的就是debug版和release版。但是这些工具在实际应用中并不是非常友好,因为它们容易被滥用,其代码页进而难以理解或调试。C#设计中考虑到这个问题,并提供了更好的工具——Conditional特性,用来为不同的环境编译不同的机器码。Conditional特性适用于方法的层面,这将强制我们将条件代码拆分为独立的方法。在需要编写条件代码时,我们应该使用Conditional特性来替代#if/#endif。

      功能描述

使用#if/#endif 语句的缺点

  例如编写一个私有方法来获取调用它的函数名称:

private string CheckMethod()
        {

#if DEBUG
            Trace.WriteLine("Entering CheckState for Person");

            string methodName = new StackTrace().GetFrame(1).GetMethod().Name;

            return methodName;
#endif
            return null;
        }

更好的解决办法——使用Conditional特性

  为了避免出现上面的问题我们可以使用Conditional特性。使用Conditional特性即可将一些函数拆分出来,让其只有在定义了某些环境变量或者设置了某个值之后才能编译并成为类的一部分。Conditional特性最常用的地方就是讲一段代码变成调试语句。使用Conditional特性的隔离策略要比#if/#endif不容易出错。

看下面的代码:

       [Conditional("DEBUG")]
        private void CheckMethod()
        {
            Trace.WriteLine("Entering CheckState for Person");
            string methodName = new StackTrace().GetFrame(1).GetMethod().Name;
        }

Conditional特性的限制

Conditional特性只可以应用在整个方法上。

任何使用了Conditional特性的方法都只能返回void类型。

      功能扩展

我们可以配置解决方案文件,来决定编译时候运行的代码,流程如下:

1、配置解决方案信息:

 

2、编写代码约束:

    [Conditional("IN_MEMORY")]
        private static void ConfigureInMemory()
        {
            ................................................           
        }

        [Conditional("NHIBERNATE")]
        private static void ConfigureInMemory()
        {
      ................................................
     }

 

代码生成的时候,我们就可以根据Conditional来决定编译走的流程;

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#解析XML格式的字符串发布时间:2022-07-14
下一篇:
C#姿态显示程序OpenglSerialPort四轴上位机模拟显示四轴状态发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap