官网:

https://msdn.microsoft.com/zh-cn/library/88td0y52.aspx

[Conditional("DEBUG")]

作为预处理中的一对:#region name ,#endregion可能是大家使用得最多的,我也常用它来进行代码分块,在一个比较长的cs文件中,这么做确实是一件可以让你使代码更清晰的好办法,VS也自动用这个来包含自动生成的代码,它这么做既可以使开发人员更清晰的查看自己的代码,也开了一个好头,使更多人使用#region。 
C#中还有好几对预处理指令,可能大家就用得比较少了。 
#define symbol 
#undef symbol 
#if symbol [operator symbol2]... 
#else 
#elif symbol [operator symbol2] 
#endif 
#warning text text指在编译器输出中的警告文字 
#error text  text指在编译器输出中的错误信息 
#line number [file]

关于#define要说明几点,#define DEBUG 等效于不写这句话,你要不定义它才一定要写上#undefin DEBUG 
 (C# Essentials一书中说 #define DEBUG 等效于#define DEBUG true,不过这个好像有问题)

这一段代码可以说明好几个命令: 
#define DEBUG 
#define VC_V6 
using System; 
public class MyClass 

   public static void Main() 
   {

#if (DEBUG && !VC_V6) 
         Console.WriteLine("DEBUG is defined"); 
      #elif (!DEBUG && VC_V6) 
         Console.WriteLine("VC_V6 is defined"); 
      #elif (DEBUG && VC_V6) 
         Console.WriteLine("DEBUG and VC_V6 are defined"); 
      #else 
         Console.WriteLine("DEBUG and VC_V6 are not defined"); 
      #endif 
   } 

我们可以用这些指令来自动处理测试期和发布期数据库的连接字符串之类的工作 
#if !RELEASE 
constr = testSQLServerConnectionString 
#else 
constr = releaseSQLServerConnectionString 
#endif 
在编代码时加上一句#undef RESEASE,发布后删除这一句就行了。

#define DEBUG

using System;

namespace SyntaxTest 

 public class Class2 
 { 
  public Class2() 
  { 
   #if DEBUG 
          #warning DEBUG is defined 
      #endif 
  } 
 } 

以上代码会在编译时产生一个警告。

#define DEBUG

using System;

namespace SyntaxTest 

 public class Class2 
 { 
  public Class2() 
  { 
   #if DEBUG 
          #error DEBUG is defined 
      #endif 
  } 
 } 

以上代码会在编译时产生一个错误,编译不通过,所以我们可以利用以上两种指令进行一些自定义的编译检测。

#line 使您得以修改编译器的行号以及(可选)错误和警告的文件名输出。

#line [ number ["file_name"] | default ]

number 
要为源代码文件中后面的行指定的编号。 
"file_name"(可选) 
希望出现在编译器输出中的文件名。默认情况下,使用源代码文件的实际名称。文件名必须括在双引号 ("") 中。 
default 
重置文件中的行编号。 
备注 
#line 可能由生成过程中的自动中间步骤使用。例如,如果中间步骤从原始的源代码文件中移除行,但是您仍希望编译器基于文件中的原始行号生成输出,则可以移除行,然后用 #line 模拟原始行号。

public class MyClass2 

   public static void Main() 
   { 
      #line 200 
      int i;   // 这一行在200行,不过在VS中看到的还是6 
      #line default 
      char c;   // 这一行在7行,不过在VS中看到的还是8 
   } 
}

最新文章

  1. nodejs学习笔记之events
  2. imooc-java-作业练习-20150918
  3. 体验最火的敏捷——SCRUM(厦门,2014.1.4)
  4. Configuring a Windows Azure Project
  5. Unix时间戳(Unix timestamp)转换工具
  6. AMBA interconnector PL301(一)
  7. Tomcat启动超时
  8. aspx返回json数据
  9. jQuery回车事件
  10. leetcode:pascal's_triangle_II
  11. centos6.8 搭建nginx+uwsgi+Flask
  12. HDMI转MIPI DSI芯片方案TC358870XBG
  13. mysql ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constrain fails
  14. CSS3:HSL和HSLA
  15. sed常见用法总结
  16. 利用eclipse中的各种功能帮助你理解代码
  17. ubuntu的命令行状态和图形化界面切换 (转)
  18. linux下wc功能的简单实现
  19. 【Code::Blocks】windows 环境下编译 Code::Blocks(已修正)
  20. Idea2016远程调试Java项目

热门文章

  1. mysql_windows解压包安装
  2. 【BZOJ】1690: [Usaco2007 Dec]奶牛的旅行(分数规划+spfa)
  3. 子级用css float浮动 而父级div没高度不能自适应高度
  4. GitHub Permission to <<repository>> denied to <<username>>
  5. C++之类模板
  6. Tanks案例笔记(一、场景搭建)
  7. iOS 关于 UIKit 专栏应该写在最前面的话
  8. 《SQL Server 2000设计与T-SQL编程》
  9. WebStorm Cordova 环境搭建
  10. shell脚本学习总结08--比较与测试