我在网络服务中有一些奇怪的代码。
#if SCALABILITYTESTING
Random r = new Random();
#endif
我在Google上进行了一些搜索,但没有发现任何有用的信息。 Web服务是用C#编写的。它所在的项目有微软单元测试。
显然,它说这个变量是否为真,然后创建一个新的随机数,我的猜测是,当我运行Microsoft单元测试时,会触发这个。
之前我没见过这样的东西,所以我想知道它是什么。
我唯一的其他线索是以下代码,位于页面的最顶层。
//#define SCALABILITYTESTING
#define SOAPSECURITY
#define SOFTWAREFEATURES
Visual Studio突出显示#define
。
我不知道下面的stackoverflow问题是否相关,我的猜测是这与DEBUG和TRACE常量类似。
Define new compile-time constant in C# (for #if)
EDIT
我发现这些链接似乎有关。
http://msdn.microsoft.com/en-us/library/yt3yck0x.aspx
http://msdn.microsoft.com/en-us/library/4y6tbswk.aspx
答案 0 :(得分:1)
问题是相关的,它类似于DEBUG和TRACE。这是一个条件编译符号。这些可以在项目属性中定义,也可以直接在#define
的代码中定义
我假设,开发人员定义它,改变他的测试或代码本身的方式来模拟一次访问Web服务的多个用户 - 或类似的。
答案 1 :(得分:1)
这些是条件编译符号,在C# Language Specification的第9.5节中定义。顾名思义,如果定义或未定义某些编译符号,它允许您省略编译的某些部分。
来自规范:
条件编译符号 两种可能的状态:定义或 未定义。在开始时 词汇处理源文件,a 条件编译符号是 未定义,除非它已经 由外部明确定义 机制(例如命令行) 编译器选项)。当#define时 指令被处理了 条件编译符号命名 在该指令中定义 那个源文件。符号仍然存在 定义直到#undef指令为止 处理相同的符号,或 直到源文件结束 到达。这意味着 #define和#undef指令 一个源文件没有效果 其他源文件相同 程序
有条件的名称空间 编译符号是不同的 与所有其他命名实体分开 在C#程序中。条件 编译符号只能是 在#define和#undef中引用 指令和预处理 表达式。