var files = (new DirectoryInfo(@"C:\Temp")).GetFiles();
然而,以下代码同样可行(请注意,在“new”关键字之前没有括号):
var files = new DirectoryInfo(@"C:\Temp").GetFiles();
为什么会允许这种情况发生?像这样的陈述:
2 + 4 * 3 and (2 + 4) * 3
由于括号的存在,14和18分别将被解析出来。这与在静态版本的DirectoryInfo对象上调用".GetFiles()"方法相似(因为没有使用"new"关键字),括号加上"new"关键字使得我明确地使用了DirectoryInfo对象的实例。
也就是说:
2 + 4 * 3
new DirectoryInfo() .GetFiles()
vs:
(2 + 4 ) * 3
(new DirectoryInfo()) .GetFiles()
有没有简单的解释说明为什么会这样呢?对于C#词法分析器来说,处理带括号和不带括号的情况难度是否更大呢?我的比喻有缺陷吗?
*
的优先级高于+
,但在表达式x + y * z
中,仍然先计算x
。我认为区分这两个概念非常重要。 (我不得不编辑自己的回答来澄清它 - 我意识到这很难 - 但值得做...) - Jon Skeet