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

标签 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);
}

最佳答案

这里的主要问题是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/

相关文章:

c# - RegularExpressionAttribute 的正则表达式必须包含 "[S]"文本

c# - 如何使用从 datagridview 检索到的 ID 将数据保存到数据库?

java - Java中的JComboBox,声明错误

java - 我不知道该怎么办! (java.lang.NoClassDefFoundError :) [closed]

c# - 从列表中获取不同的参数

c# - 什么是 C# 中的公共(public)获取/保护集属性的 Objective-C 等价物

c# - 前台线程不会阻止控制台进程终止吗?

c++ - 类型 'double' 和 'int' 到二进制 'operator%' 的无效操作数

c# - 无参数方法签名与参数委托(delegate)不匹配

c# - 定义自己的关键字和含义