使用三元运算符在编译时计算字符串常量

时间:2018-11-20 14:03:00

标签: c# compiler-errors

问:有没有办法使下面的示例以C#或类似的精神进行编译?

public class Switch
{
    public const bool Value = true;
}

public class A
{
    private const string Id = "foo" + (Switch.Value ? "Dev" : String.Empty);
}

1 个答案:

答案 0 :(得分:3)

这里的主要问题是String.Empty,它不是const表达式,即使它始终会求值为""

因此,如果您尝试这样做:

public class Switch
{
    public const bool Value = true;
}

public class A
{
    private const string Id = "foo" + (Switch.Value ? "Dev" : "");
}

它应该立即编译,至少在C#7.3中可以。


请注意,const 真的表示恒定

例如,如果您将上述两个类放在两个不同的项目中,请同时重建这两个类,然后将Switch.Value更改为 false ,然后仅重建该项目,那么A.Value将保持不变,不会“重新评估”,因为这是在构建时完成的。

通常将const用于不是真正常数的任何事物,除非您始终在重建整个解决方案,所有事物,整个应用程序,同时,可能可以。

但是,我仍然为此使用readonly字段/属性,而不是const