¿Por qué utilizar la palabra clave params?

Resuelto MasterMastic asked hace 12 años • 11 respuestas

Sé que esta es una pregunta básica, pero no pude encontrar una respuesta.

¿Por qué usarlo? Si escribe una función o un método que lo utiliza, cuando lo elimine, el código seguirá funcionando perfectamente, 100% como sin él. P.ej:

Con parámetros:

static public int addTwoEach(params int[] args)
{
    int sum = 0;
    foreach (var item in args)
        sum += item + 2;
    return sum;
}

Sin parámetros:

static public int addTwoEach(int[] args)
{
    int sum = 0;
    foreach (var item in args)
       sum += item + 2;
    return sum;
}
MasterMastic avatar Sep 28 '11 15:09 MasterMastic
Aceptado

Conparams puedes llamar a tu método de esta manera:

addTwoEach(1, 2, 3, 4, 5);

Sin params, no puedes.

Además, puedes llamar al método con una matriz como parámetro en ambos casos :

addTwoEach(new int[] { 1, 2, 3, 4, 5 });

Es decir, paramsle permite utilizar un atajo al llamar al método.

Sin relación, puedes acortar drásticamente tu método:

public static int addTwoEach(params int[] args)
{
    return args.Sum() + 2 * args.Length;
}
Konrad Rudolph avatar Sep 28 '2011 08:09 Konrad Rudolph

El uso paramsle permite llamar a la función sin argumentos. Sin params:

static public int addTwoEach(int[] args)
{
    int sum = 0;

    foreach (var item in args)
    {
        sum += item + 2;
    }

    return sum;
}

addtwoEach(); // throws an error

Comparar con params:

static public int addTwoEach(params int[] args)
{
    int sum = 0;

    foreach (var item in args)
    {
        sum += item + 2;
    }

    return sum;
}

addtwoEach(); // returns 0

Generalmente, puede usar parámetros cuando el número de argumentos puede variar de 0 a infinito y usar una matriz cuando el número de argumentos varía de 1 a infinito.

Tadeusz avatar Sep 28 '2011 09:09 Tadeusz

Le permite agregar tantos parámetros de tipo base en su llamada como desee.

addTwoEach(10, 2, 4, 6)

mientras que con la segunda forma tienes que usar una matriz como parámetro

addTwoEach(new int[] {10,2,4,6})
okrumnow avatar Sep 28 '2011 08:09 okrumnow