64 - Número variable de parámetros


Hasta ahora hemos planteado métodos que reciben una cantidad fija de parámetros, pero C# permite implementar métodos con una cantidad variable de parámetros (es decir que llamemos al método pasando en algunas circunstancias pasándole dos parámetros y en otras pasándole 5)

Para resolver esto C# incorpora la palabra clave params y seguidamente un vector.

Problema 1:

Implementar un método que le envíe una cantidad n de enteros y me retorne la suma de los mismos.

Programa:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ParametrosVariables1
{
    class Program
    {
        public int Sumar(params int[] p)
        {
            int su = 0;
            for (var f = 0; f < p.Length; f++)
            {
                su = su + p[f];
            }
            return su;
        }

        static void Main(string[] args)
        {
            Program p = new Program();
            Console.Write("La suma de 3,4,5 es ");
            Console.WriteLine(p.Sumar(3,4,5));
            Console.ReadKey();
        }
    }
}

Como podemos ver le antecedemos al nombre del vector la palabra clave params:

public int Sumar(params int[] p) { int su = 0; for (var f = 0; f < p.Length; f++) { su = su + p[f]; } return su; }

La diferencia fundamental es que desde donde llamamos al método no le pasamos un vector de enteros, sino una lista de parámetros enteros:

            Console.WriteLine(p.Sumar(3,4,5));

Un método solo puede tener un solo parámetro de este tipo y debe ser siempre el último, por ejemplo:

        public int Sueldos(string nombre,params float[] su)

Problema propuesto

  1. Confeccionar un método que reciba un string con la cadena "suma" o "producto" y seguidamente una lista de enteros. El método debe retornar la suma o producto de todos los valores enviados.
Solución
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ParametrosVariables2
{
    class Program
    {
        public int Operar(string operacion, params int[] v)
        {
            if (operacion == "suma")
            {
                int suma = 0;
                for (var f = 0; f < v.Length; f++)
                {
                    suma = suma + v[f];
                }
                return suma;
            }
            if (operacion == "producto")
            {
                int producto = 1;
                for (var f = 0; f < v.Length; f++)
                {
                    producto=producto * v[f];
                }
                return producto;
            }
            return int.MaxValue;
        }

        static void Main(string[] args)
        {
            Program p = new Program();
            Console.Write("El producto de 2*3*4 es ");
            Console.WriteLine(p.Operar("producto", 2, 3, 4));
            Console.Write("La suma de 5+10 es ");
            Console.WriteLine(p.Operar("suma", 5, 10));
            Console.ReadKey();
        }
    }
}

Retornar