【发布时间】:2011-07-16 04:34:19
【问题描述】:
在C#中使用??运算符时,如果被测试的值不为空,是否会短路?
例子:
string test = null;
string test2 = test ?? "Default";
string test3 = test2 ?? test.ToLower();
test3 行是成功还是抛出空引用异常?
所以换一种方式来表达这个问题:右手表达 ??如果左手不为空,则对运算符进行评估?
【问题讨论】:
-
你为什么不试试呢?在右侧使用您自己的方法。
-
我很确定确实如此。否则我见过的很多代码都会被破坏。 MSDN文章没有提到,我也懒得在spec里查了。
-
因为我想知道权威(阅读:我很懒;)
-
这实际上是一个好点。如果你只是尝试它,你永远无法确定你观察到的行为是(a)你总是可以依赖的东西,或者(b)只是编译器的一些实现细节(例如一些优化)。为了安全起见,您需要检查文档以了解 指定 行为。
-
我看到很多这样的问题。为什么谷歌把我带到这里而不是语言规范?谷歌首先把我带到了这里:msdn.microsoft.com/en-us/library/ms173224.aspx为什么那个页面没有回答关于短路的问题?
标签: c# operators short-circuiting