C# Language "params" n'est pas développé, sauf si nécessaire.


Exemple

Le programme suivant:

class Program
{
    static void Method(params Object[] objects)
    {
        System.Console.WriteLine(objects.Length);
    }   
    static void Method(Object a, Object b)
    {
        System.Console.WriteLine("two");
    }
    static void Main(string[] args)
    {
        object[] objectArray = new object[5];

        Method(objectArray);
        Method(objectArray, objectArray);
        Method(objectArray, objectArray, objectArray);
    }
}

imprimera:

5
two
3

La Method(objectArray) expression d’appel Method(objectArray) peut être interprétée de deux manières: un seul argument d’ Object qui se trouve être un tableau (le programme afficherait donc 1 car ce serait le nombre d’arguments, ou un tableau d’arguments, donné dans le forme normale, comme si la méthode Method n'a pas le mot - clé params . Dans ces situations, la normale, sous forme non expansé a toujours la priorité. Ainsi, les résultats du programme 5 .

Dans la deuxième expression, Method(objectArray, objectArray) , la forme développée de la première méthode et la seconde méthode traditionnelle sont applicables. Dans ce cas également, les formulaires non développés sont prioritaires, de sorte que le programme imprime two .

Dans la troisième expression, Method(objectArray, objectArray, objectArray) , la seule option consiste à utiliser la forme développée de la première méthode et le programme imprime donc 3 .