C# Language "params" no se expande, a menos que sea necesario.


Ejemplo

El siguiente programa:

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

imprimirá:

5
two
3

El Method(objectArray) expresión de llamada Method(objectArray) se puede interpretar de dos maneras: un solo argumento de Object que resulta ser una matriz (por lo que el programa generaría 1 porque ese sería el número de argumentos, o como una matriz de argumentos, dados en la forma normal, como si el método Method no tuviera la palabra clave params . En estas situaciones, la forma normal no expandida siempre tiene prioridad. Por lo tanto, el programa produce 5 .

En la segunda expresión, Method(objectArray, objectArray) tanto la forma expandida del primer método como el segundo método tradicional. También en este caso, las formas no expandidas tienen prioridad, por lo que el programa imprime two .

En la tercera expresión, Method(objectArray, objectArray, objectArray) , la única opción es usar la forma expandida del primer método, y así se imprime el programa 3 .