问:有没有办法使下面的示例以C#或类似的精神进行编译?
public class Switch
{
public const bool Value = true;
}
public class A
{
private const string Id = "foo" + (Switch.Value ? "Dev" : String.Empty);
}
答案 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
。