【C#高效编程50例】条目4: 使用Conditional特性而不是#if条件编译
2015-10-15 18:29
686 查看
1 #if条件编译的写法:
在release方法中,就会留下一个CheckStateBad的空方法;虽然不做什么事,但方法的加载、JIT编译和调用也会有开销。
2 C#提供了更好的方法,Conditional特性
该特性可以标识出某种环境设置下该方法是否该被调用。
3 [Coditional("DEBUG"), Conditional("TRACE")]
两个条件是或的关系;
4 Conditional只能应用在整个方法上;且方法返回类型必须是Void;且最好不接受任何参数;
若要有参数,则可能有bug
例如:
在release环境中somemehtod方法不会被调用,则
也不会被调用,得到的结果将是空。
private void CheckStateBad() { #if DEBUG string methodname = new StackTrace().GetFrame(1).GetMethod().Name; Debug.Assert(lastname != null, methodname, "Last name cannot be null."); #endif }
在release方法中,就会留下一个CheckStateBad的空方法;虽然不做什么事,但方法的加载、JIT编译和调用也会有开销。
2 C#提供了更好的方法,Conditional特性
该特性可以标识出某种环境设置下该方法是否该被调用。
[Coditional("DEBUG")] private void CheckStateBad() { string methodname = new StackTrace().GetFrame(1).GetMethod().Name; Debug.Assert(lastname != null, methodname, "Last name cannot be null."); }编译器只有检查到DEBUG环境变量时才会调用该方法;但不会影响该方法的编译;
3 [Coditional("DEBUG"), Conditional("TRACE")]
两个条件是或的关系;
4 Conditional只能应用在整个方法上;且方法返回类型必须是Void;且最好不接受任何参数;
若要有参数,则可能有bug
例如:
[Conditional("DEBUG")] private void SomeMethod(string par) { // code }然后调用这个方法:
Queue<string> names = new Queue<string>(); names.Enqueue("one"); string item = string.Empty; SomeMethod(item = names.Dequeue()); Console.Write(item);
在release环境中somemehtod方法不会被调用,则
item = names.Dequeue()
也不会被调用,得到的结果将是空。
相关文章推荐
- CSharp任何可比较的数据类型(大小比较泛型实现方法)封装
- 关于C#的一些小知识
- C#量转换为汉字表达
- C#下分割(spilt)回车换行符(\r\n)
- C#中哈希表(HashTable)的用法详解
- C# Form之间传递数据(ShowDialog类型)
- C#获取变量名的扩展方法
- C#之 HashSet(临时笔记,未参考资料,请慎重)
- [转]c#配置文件
- c#串口收发数据
- c# wince 启动隐藏窗体
- C#常用开发技巧
- C#基础巩固(1)-多态+简单工厂
- 如何用vs2008写c#程序
- C#正则表达式的6个简单例子
- C#.Net ArrayList的使用方法
- C#语言中的修饰符汇总
- C# 垃圾回收机制
- C#使用Log4Net记录日志(转的)
- C#开发中的垃圾回收机制简析