【发布时间】:2017-05-26 06:27:18
【问题描述】:
在MSDN,我找到了这句话:
?? 的结果即使它的两个参数都是常量,运算符也不被视为常量。
这意味着什么?他们的意思是编译器优化器不知道这个值是恒定的吗?我没有看到这可能是相关的另一种方式。
编辑: 为什么这不被认为是恒定的?这有什么合乎逻辑的原因吗?
编辑:这段代码给出了x的编译器错误,但y没有,为什么?:可以产生一个常量值,而??不能?
const string NULL = null;
const string val = "value";
const string x = NULL ?? val;
const string y = NULL == null ? val : NULL;
【问题讨论】:
-
也许只是强调它不能用于编译器(语言规范?)需要常量表达式的地方,例如作为字段启动器。
-
这正是它所说的 - 你不能在预期常量的地方使用结果 - 例如分配给另一个相同类型的常量。
-
让我们等待@ericlippert :) 在那之前我们只能猜测
-
至于它的逻辑原因,您必须作为 MS 来获得明确的答案,但使用带有 ?? 的常量在逻辑上毫无意义,为什么在固定的已知值上使用合并
const string = "a string" ?? "null"永远不会为空,const string = null ?? "null"将始终为“空”,所以应该使用右手而不用 ?? -
@Luaan:现在你知道我为什么要反驳“为什么语言不这样做?”这样的问题。 “为什么不呢?”问题很难回答;它预设了宇宙应该是一种它不是的方式,然后需要一个解释。没有人会想到“你为什么不在法国出生?”这样的问题。是合理的,但以某种方式询问语言设计者为什么没有做出特定决定被认为是公平的游戏。
标签: c# null-coalescing-operator