¿Por qué la lista se pasa sin referencia a una función que actúa como pasada con referencia?

Si no me equivoqué terriblemente, este comportamiento es extraño para mí. En lugar de explicarlo, publicaré un código de muestra a continuación y por favor dígame por qué obtengo la salida x y no y.

    private void button1_Click(object sender, EventArgs e)
    {
        List<int> l = new List<int>() { 1, 2, 3 };
        Fuss(l);
        MessageBox.Show(l.Count.ToString());
    }

    private void Fuss(List<int> l)
    {
        l.Add(4);
        l.Add(5);
    }

La salida debería, supongo que sería 3. Pero obtengo el resultado como 5. Entiendo que el resultado puede ser 5 si hago esto:

    private void button1_Click(object sender, EventArgs e)
    {
        List<int> l = new List<int>() { 1, 2, 3 };
        Fuss(ref l);
        MessageBox.Show(l.Count.ToString());
    }

    private void Fuss(ref List<int> l)
    {
        l.Add(4);
        l.Add(5);
    }

Respuestas a la pregunta(7)

Su respuesta a la pregunta