¿Existe una alternativa de C # a los parámetros vararg de Java?

93

He trabajado en Java y soy nuevo en la tecnología .Net.

¿Es posible declarar una función en C # que acepta parámetros de entrada variables?

¿Existe alguna sintaxis de C # similar a la siguiente sintaxis de Java?

void f1(String... a)
Pradeep KM
fuente
2
Si alguna de las respuestas a continuación responde a su pregunta, la forma en que funciona Stack Overflow, "aceptará" la respuesta haciendo clic en la marca de verificación junto a ella; detalles aquí .
TJ Crowder

Respuestas:

150

Sí, C # tiene un equivalente de parámetros varargs. Se llaman matrices de parámetros y se introducen con el paramsmodificador:

public void Foo(int x, params string[] values)

Entonces llámalo con:

Foo(10, "hello", "there");

Al igual que con Java, es solo el último parámetro el que puede variar de esta manera. Tenga en cuenta que (al igual que con Java) un parámetro de params object[] objectspuede causar confusión fácilmente, ya que debe recordar si un solo argumento de tipo object[]debe ajustarse nuevamente o no. Del mismo modo, para cualquier tipo que acepta valores NULL, debe recordar si un solo argumento de nullse tratará como una referencia de matriz o como un solo elemento de matriz. (Creo que el compilador solo crea la matriz si es necesario, pero tiendo a escribir código que me evita tener que recordarlo).

Jon Skeet
fuente
+1, aunque mencionaría que (como con casi cualquier otra función de idioma), no se debe abusar de esto.
Federico Berasategui
16
@HighCore: Si vas a mencionarlo sobre casi cualquier otra característica del idioma, probablemente no vale la pena mencionarlo :)
Jon Skeet
2
@hvd: Dado que el OP parece ser un principiante, prefiero no entrar en argumentos con nombre, parámetros opcionales, etc. aquí. Veo el punto que estás tratando de hacer, pero creo que agregaría más confusión que luz en este momento.
Jon Skeet
37

Eche un vistazo a params (referencia de C #)

La palabra clave params le permite especificar un parámetro de método que toma un número variable de argumentos.

Puede enviar una lista de argumentos separados por comas del tipo especificado en la declaración del parámetro, o una matriz de argumentos del tipo especificado. Tampoco puede enviar argumentos.

No se permiten parámetros adicionales después de la palabra clave params en una declaración de método, y solo se permite una palabra clave params en una declaración de método.

Como se muestra en el ejemplo, el método se declara como

public static void UseParams(params int[] list)
{
    for (int i = 0; i < list.Length; i++)
    {
        Console.Write(list[i] + " ");
    }
    Console.WriteLine();
}

y usado como

UseParams(1, 2, 3, 4);
Adriaan Stander
fuente