Behaviour of string.Join
<p>I'm using <code>string.Join()</code> to concatenate values with delimiters - here is my simplified example using <code>User</code> class:</p>

<pre><code>public class User
{
    public string Name { get; set; }
    public int Age { get; set; }
}
</code></pre>

<p>Here are my results:</p>

<pre><code>User uItem = new User() { Age = 10, Name = null };

string item1 = string.Join(";", string.Empty, 1); // returns ";1"  
string item2 = string.Join(";", null, 1); // returns ""        
string item3 = string.Join(";", uItem.Name, uItem.Age, 1); // returns ""
string item4 = string.Join(";", 1, null); //returns "1;"
string item5 = string.Join(";", null, uItem.Age, 1); // throws null exception
</code></pre>

<p>First I was surprised that <code>item2</code> doesn't behave like <code>item1</code> and determines a <code>""</code> instead of <code>";1"</code>.</p>

<p>Is there a rule like  <em>null is allowed but not at the first item?</em></p>

<p><strong>My question:</strong> why does <code>item3</code> return <code>""</code> and <code>item5</code> throws a exception? The input values are equal.</p>