【发布时间】:2020-01-23 10:12:56
【问题描述】:
我正在写这段代码:
public const int MAJOR_VERSION = 3;
public const int MINOR_VERSION = 3;
public const string VERSION_STRING = $"v.{MAJOR_VERSION}{MINOR_VERSION}";
而且,编译器抱怨:
“分配给 VERSION_STRING 的表达式必须是常量”
我知道 const 表达式是由编译器传播的,但在这种特殊情况下,可以很容易地静态创建字符串,因为它只依赖于其他常量。
所以也许有人可以向我解释为什么这还不是该语言的一个特性? 或者甚至,为什么我问这样一个问题很愚蠢..
提前致谢。 :)
【问题讨论】:
-
$"..."是string.Format/Concat方法调用...所以它不是常量... -
weblog.west-wind.com/posts/2016/Dec/27/…。 “乍一看,插值字符串看起来像是一种创建评估表达式的字符串模板的简单方法。但重要的是要了解 C# 中的字符串插值仅仅是编译器生成的语法糖,它动态生成带有编译时表达式的 string.Format() 代码参数化。”
-
这能回答你的问题吗? Why does interpolating a const string result in a compiler error? 这是谷歌搜索的第一个结果:“C# 字符串必须是常量插值”
标签: c# string constants constant-expression