为什么我不能将不可打印的字符定义为常量c#

时间:2016-10-03 08:41:22

标签: c#

private const string requireNonPrintableChar = new string('\x0005', 1);

我不希望这个值发生变化。曾经有人告诉我,使用const作为你不希望改变的值的好习惯。

然而msbuild说: “错误1指定给requireNonPrintableChar的表达式必须是常量”

我假设char不算作const而是为什么?

msdn说它可以是一个字符串,我相信它。

3 个答案:

答案 0 :(得分:4)

简单地说:

private const string requireNonPrintableChar = "\x0005";

new string('\x0005', 1)是一个表达式 被评估为字符串,但它不是编译时常量,const字段只能赋值在编译时进行评估。

答案 1 :(得分:4)

必须直接定义常量。你不能使用函数来获得你的const值。

而不是这样做

const string MY_CONST = test();

        static string GetValue()
        {
            return "Hello";
        }

你应该这样做

const string MY_CONST = "Hello";

如果你想使用方法初始化,你可以像这样使用静态只读

private static readonly string requireNonPrintableChar = new string('\x0005', 1); 

Source

答案 2 :(得分:0)

你可以做什么w0lf说:

private const string requireNonPrintableChar = "\x0005";

但如果你想要第二个参数,请使用:

private static readonly string requireNonPrintableChar = new string('\x0005', 1); // should be greater than 1