在C语言中,我可以使用以下方式声明编译器指令:
然而,在C#中,我似乎只能这样做:
#define MY_NUMBER 10
然而,在C#中,我似乎只能这样做:
#define MY_NUMBER
在这种情况下,显然是无用的。
我的做法正确吗?如果不正确,有没有人能够建议一种在命名空间或解决方案级别实现此功能的方法?我想过可能创建一个静态类,但这似乎对于一个值来说过于复杂。
#define MY_NUMBER 10
#define MY_NUMBER
在这种情况下,显然是无用的。
我的做法正确吗?如果不正确,有没有人能够建议一种在命名空间或解决方案级别实现此功能的方法?我想过可能创建一个静态类,但这似乎对于一个值来说过于复杂。
是的,这是正确的。
以下是MSDN文档中的引用:
预处理指令提供了条件地跳过源文件的部分内容、报告错误和警告条件以及划分源代码的不同区域的能力。术语“预处理指令”仅用于与C和C++编程语言保持一致。在C#中,没有单独的预处理步骤;预处理指令作为词法分析阶段的一部分进行处理。
因此,你不能像在C和C++中定义编译器常量。
相关资源:
public const
字段。但请注意,public const
将会被编译进引用它的程序集中,如果您改变了const
的值,那么不仅需要重新编译该字段所在的程序集,还需要重新编译所有引用它的程序集。public static readonly
字段是一个更好的选择。您可以定义一个常量或静态只读变量,如果您希望它有条件地存在,您可以将其包装在 #if 指令中。
#if DEBUG
private const int MY_NUMBER = 10;
#else
private const int MY_NUMBER = 20;
#endif
没错,你说得对。 const
和 readonly
是你唯一的选择。
据我所知,
C#不使用预处理器定义来执行代码替换,因此您必须使用常量。
这应该可以解决问题:
public const int MY_NUMBER = 10;
您可能还想检查枚举,例如
enum Numbers
{
Nothing = 0,
Dads = 5,
My = 10,
LittleJims = 25
}
因此,你可以使用Numbers.My代替C语言中的MY_NUMBER。