题
在 C 中,我可以声明一个编译器指令,如下所示:
#define MY_NUMBER 10
然而,在 C# 中,我似乎只能做到这一点:
#define MY_NUMBER
在这种情况下这显然是无用的。
这是正确的,还是我做错了什么?如果没有,任何人都可以建议一种在命名空间或解决方案级别执行此操作的方法吗?我想过也许创建一个静态类,但这对于一个值来说似乎有点过分了。
解决方案
是的,这是正确的。
以下是 MSDN 文档中的引用:
预处理指令提供 这 能够有条件跳过源文件的部分,报告错误和警告条件,并描述源代码的不同区域. 。术语“预处理 指令“仅用于 与 C 和 C++ 的一致性 编程语言。在 C# 中,有 没有单独的预处理步骤;预处理指令是 作为词法的一部分进行处理 分析阶段。
所以你不能真正定义编译器常量,就像在 C 和 C++ 中一样。
相关资源:
其他提示
许多其他答案建议使用 public const
场地。但请注意, public const
将被编译成引用它的程序集,迫使您不仅重新编译定义它的程序集,而且如果您更改了 const
.
如果您不确定该值永远不必更改, public static readonly
领域是一个更好的选择。
是的,你是对的。 const
和 readonly
确实是您唯一的选择。
您可以定义 const 或 static readonly,如果您有条件地需要它,您可以将其包装在 #if 指令中
#if DEBUG
private const int MY_NUMBER = 10;
#else
private const int MY_NUMBER = 20;
#endif
您可能还想检查枚举,例如
enum Numbers
{
Nothing = 0,
Dads = 5,
My = 10,
LittleJims = 25
}
因此,您拥有 Numbers.My,而不是 C 的 MY_NUMBER。
使用公共常量
AFAIK,
C# 不使用预处理器定义来执行代码中的替换, 所以你必须使用一个常量。
这应该可以解决问题:
public const int MY_NUMBER = 10;
不隶属于 StackOverflow