C# Language "params" non è espanso, se non necessario.


Esempio

Il seguente programma:

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);
    }
}

stamperà:

5
two
3

Il Method(objectArray) expression call Method(objectArray) potrebbe essere interpretato in due modi: un singolo argomento Object che capita di essere un array (quindi il programma emetterebbe 1 perché sarebbe il numero di argomenti, o come una matrice di argomenti, dato nel forma normale, come se il metodo Method non avesse i params della parola chiave In queste situazioni, la forma normale, non espansa ha sempre la precedenza, quindi il programma emette 5 .

Nella seconda espressione, Method(objectArray, objectArray) , sono applicabili sia la forma espansa del primo metodo che il secondo metodo tradizionale. Anche in questo caso, le forme non espanse hanno la precedenza, quindi il programma ne stampa two .

Nella terza espressione, Method(objectArray, objectArray, objectArray) , l'unica opzione è utilizzare la forma espansa del primo metodo, quindi il programma stampa 3 .