在 C 中,我可以声明一个编译器指令,如下所示:

#define MY_NUMBER 10

然而,在 C# 中,我似乎只能做到这一点:

#define MY_NUMBER

在这种情况下这显然是无用的。

这是正确的,还是我做错了什么?如果没有,任何人都可以建议一种在命名空间或解决方案级别执行此操作的方法吗?我想过也许创建一个静态类,但这对于一个值来说似乎有点过分了。

有帮助吗?

解决方案

是的,这是正确的。

以下是 MSDN 文档中的引用:

预处理指令提供 这 能够有条件跳过源文件的部分,报告错误和警告条件,并描述源代码的不同区域. 。术语“预处理 指令“仅用于 与 C 和 C++ 的一致性 编程语言。在 C# 中,有 没有单独的预处理步骤;预处理指令是 作为词法的一部分进行处理 分析阶段。

所以你不能真正定义编译器常量,就像在 C 和 C++ 中一样。

相关资源:

其他提示

许多其他答案建议使用 public const 场地。但请注意, public const 将被编译成引用它的程序集,迫使您不仅重新编译定义它的程序集,而且如果您更改了 const.

如果您不确定该值永远不必更改, public static readonly 领域是一个更好的选择。

是的,你是对的。 constreadonly 确实是您唯一的选择。

您可以定义 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;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top