title: Why is list when passed without ref to a function acting like passed with ref?
body: <p>If I did not get this terribly wrong, this behaviour is strange for me. Rather than explaining, I'll post a sample code below and please tell me why does I get output x and not y.</p>
  <pre><code>    private void button1_Click(object sender, EventArgs e)
      {
          List&lt;int&gt; l = new List&lt;int&gt;() { 1, 2, 3 };
          Fuss(l);
          MessageBox.Show(l.Count.ToString()); // output is 5
      }
  
      private void Fuss(List&lt;int&gt; l)
      {
          l.Add(4);
          l.Add(5);
      }
  </code></pre>
  <p>Output should, I assume would be 3. But I get the output as 5. I understand the output can be 5 if I do this:</p>
  <pre><code>    private void button1_Click(object sender, EventArgs e)
      {
          List&lt;int&gt; l = new List&lt;int&gt;() { 1, 2, 3 };
          Fuss(ref l);
          MessageBox.Show(l.Count.ToString()); // output is 5
      }
  
      private void Fuss(ref List&lt;int&gt; l)
      {
          l.Add(4);
          l.Add(5);
      }
  </code></pre>