问:有没有办法让下面的示例在 C# 或类似的精神上编译?
public class Switch
{
public const bool Value = true;
}
public class A
{
private const string Id = "foo" + (Switch.Value ? "Dev" : String.Empty);
}
最佳答案
这里的主要问题是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
为假,只重建那个项目 ,然后 A.Value
将保持不变,它不会“重新评估”,因为那是在 build 时完成的。使用
const
通常不是一个好主意对于不属于 的任何内容真的不变,除非你总是同时重建整个解决方案、所有内容、整个应用程序,那么它可能没问题。但是我仍然会使用
readonly
字段/属性,而不是 const
.
关于c# - 在编译时使用三元运算符计算字符串常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53394733/