Pourquoi est liste lorsqu'il est passé sans ref à une fonction d'agir comme passé avec les ref?

Si je ne trouvais pas cela très mal, et ce comportement est étrange pour moi. Plutôt que d'expliquer, je vais poster un exemple de code ci-dessous et s'il vous plaît dites-moi pourquoi je obtenir une sortie de x et pas 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);
    }

Sortie doit, je suppose, serait de 3. Mais je reçois la sortie 5. Je comprends la sortie peut être 5 si je fais ceci:

    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);
    }
Vous devriez également lire Jon Skeet Passage de paramètres en C#.

OriginalL'auteur nawfal | 2011-09-06