目前在我的代码中我有这个if语句:
if (System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.Major > 0)
{
//Stuff that will execute when we get out of beta
}
由于可以在编译时预测这个语句的结果,我想知道,只是出于好奇,是否有办法用类似的东西替换它
#if MAJOR_VERION > 0
//Do stuff
#endif
另外,如果这是可能的,那么它是好还是坏.net实践?
答案 0 :(得分:5)
你不能这样做 - 预处理器符号要么“开”或“关”(定义与否),而不是数字值。
您可以在适当的项目配置中轻松定义BETA预处理器符号。然后,您可以在测试结束时将其删除。
(我不确定这样的条件化代码通常是个好主意,请注意。如果在测试结束之前不打算执行该代码,您将如何测试该代码? )
答案 1 :(得分:3)
您只能在C#中的预处理程序指令中使用==
和!=
条件。
请参阅MSDN:
您可以使用运算符==(相等),!=(不等式)来测试true或false。 True表示符号已定义。语句#if DEBUG与#if(DEBUG == true)具有相同的含义。
您可以自己定义符号,项目文件,command line或代码(#define
)。
答案 2 :(得分:2)
由于可以在编译时预测此语句的结果
不是。引用程序集不必与运行时程序集匹配。 .config文件中的发布者策略或<BindingRedirect>
元素允许在运行时加载另一个版本的程序集而不会出现异常。 .NET中的程序集绑定非常动态。您可以在代码中使用#if指令(不要使用表达式),当您必须支持多个平台目标时,不要使用非典型指令,但您的原始方法是更通用的解决方案。