Why are no parentheses needed when using the new keyword?
<p>If I want to get a list of all files in a certain directory, I can type something like:</p>

<pre><code>var files = (new DirectoryInfo(@"C:\Temp")).GetFiles();
</code></pre>

<p>However, the following also works (note the lack of parentheses before the "new" keyword):</p>

<pre><code>var files = new DirectoryInfo(@"C:\Temp").GetFiles();
</code></pre>

<p>Why is this allowed to happen? Statements like:</p>

<pre><code>2 + 4 * 3   and   (2 + 4) * 3
</code></pre>

<p>will resolve to 14 and 18, respectively, because of the parentheses.</p>

<p>It seems like my code example would be analogous to calling the ".GetFiles()" method on the static version of the DirectoryInfo object (because of the lack of the "new" keyword), where the parentheses combined with the "new" keyword make it explicit that I'm using an instance of the DirectoryInfo object.</p>

<p>i.e.:</p>

<pre><code>2   +  4               * 3
new    DirectoryInfo()   .GetFiles()
</code></pre>

<p>vs:</p>

<pre><code>(2   +  4              ) * 3
(new    DirectoryInfo())   .GetFiles()
</code></pre>

<p>Is there a simple explanation for why this is the case? Isn't it more work for the C# lexer to deal with both cases (with/without parentheses)? Is my analogy flawed?</p>
