JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Creación de métodos con un número arbitrario de argumentos en C#

Esta cuestión es probable que a alguno le resulte trivial, si bien es cierto que a muchos programadores de C# (incluso a algunos experimentados) se les pasa por alto a veces, así que no está de más hacer un recordatorio.

La cuestión es la siguiente: ¿cómo construyo un método (función) que me permita pasarle un número cualquiera de parámetros?

Por ejemplo, imaginemos para simplificar que quiero construir una función que sume todos los enteros que se le pasen. Puedo definir varias versiones de la misma, cada una de las cuales tomando un número diferente de parámetros (un entero, dos enteros, tres, etc...). Hacerlo así, obviamente, aparte de ser una pérdida de tiempo es una cuestión bastante absurda: siempre encontraríamos un límite de parámetros, aparte de ser algo así como "matar moscas a cañonazos".

La solución en C# es muy sencilla: basta con indicarle al compilador que nuestra función necesitará un número arbitrario de parámetros, que no sabemos de antemano cuántos serán. Esto se consigue haciendo uso de la palabra clave 'params' en la definición del método. En nuestro ejemplo, una función 'Suma' que tome un número cualesquiera de enteros y los sume se definiría de la siguiente forma:

int Suma(params int[] sumandos)
 {
  int res = 0;
  for(int i = 0; i<sumandos.Length; i++)
  {
   res += sumandos[i];
  }
  return res;
 }

Fíjate que sólo tiene un parámetro de tipo matriz de enteros. Lo bueno es que al haber incluído la palabra clave 'params' no es necesario construir una matriz de enteros y pasársela, sino que es el compilador quien lo hace por nosotros de manera transparente simplificando mucho la llamada a la función, ya que basta con escribir algo así como:

int resultado = Suma(1,2,3,4,5,6,7);

o bien:

int resultado = Suma(1,2,3,4);

Como vemos se le puede pasar el número de argumentos que queramos y el compilador se encarga de convertirlo en una matriz y pasárselo a la función. Muy cómodo.

Fíjate que el método se comportará bien incluso si lo llamamos sin pasarle parámetro alguno:

int resultado = Suma();

devolvería un 0.

José Manuel Alarcón
Banner

Agregar comentario