Saltar al contenido

Parámetros de salida y descartes en C#

Antes de C# 7.0, había una versión más antigua de la palabra clave out. Nos vamos a centrar en la mejorada que se introdujo en la nueva versión.

Reglas:

Parámetros de salida y descartes en C#
Parámetros de salida y descartes en C#
  1. nuestro parámetro puede ser pasado sin desclaración e inicialización.
  2. out parameter puede utilizar var type en la lista de parámetros del método.
  3. No es necesario tener el mismo nombre para el parámetro de salida en la definición de la función y la llamada.

Vamos a centrarnos en una pequeña aplicación que calcula si cumplimos con el SLA para un cliente determinado. Tomaremos dos argumentos. Uno se llama totalHours y el otro se llama availableHours.

La versión sin nuestros parámetros se ve algo así.

123456789101112131415161718192021222324 usando el sistema;namespace {publicclassOuterDiscards{publicstaticvoidMain(){ Console.WriteLine("Por favor, introduzca el totalHoras: ");double totalHoras = Convertir.ADoble(Console.ReadLine()); Consola. WriteLine("Por favor, introduzca el totalHours: ");double availableHours = Convert.ToDouble(Console.ReadLine()); Console.WriteLine(SLA(totalHours, availableHours)); Console.ReadKey();}publicstaticstringSLA(double a,double b){double result = Math.Round((((b / a)*100),2);string sla = $"Total hours: {a}, Horas disponibles: SLA:{b} == %";return sla;}}

csharp

La siguiente salida se produce cuando se ejecuta el código.

12345Por favor, introduzca el totalHoras:1000Por favor, introduzca las horas disponiblesHoras:999Horas totales: 1000, Horas disponibles: 999==...; SLA:99.9 %

bash

Utilizando el hecho de que nuestras variables pueden ser pasadas sin declaración o inicialización, podemos modificar el código de la siguiente manera.

123456789101112131415161718192021222324usando el Sistema;namespace {publicclassOuterDiscards{publicstaticvoidMain(){ Console.WriteLine("Por favor, introduzca el totalHoras: ");double totalHoras = Convertir.ADoble(Console.ReadLine()); Console.WriteLine("Por favor, introduzca el disponibleHoras: ");double disponibleHoras = Convertir. ToDouble(Console.ReadLine()); Console.WriteLine(SLA(totalHours, availableHours,outdouble result,outstring sla)); Console.ReadKey();}publicstaticstringSLA(double a,double b,outdouble result,outstring sla){ result = Math.Round(((b / a)*100),2); sla = $"Total hours: {a}, Horas disponibles: SLA:{b} == %";return sla;}}

csharp

Fíjate en cómo la llamada de la función y la definición se ampliaron con el resultado out double, out string sla. Esta técnica se llama in-line declaración del parámetro out. El método es necesario para asignar un valor a los parámetros out antes de devolverlos. También se permite sobrecargarlos en función de los parámetros out. Los métodos Async e Iterator no tienen un parámetro de salida.

Si hubiéramos querido, podríamos haber usado la declaración de tipo implícito para nuestras variables de salida, así como el tipo var, que tiene el mismo alcance en el cuerpo del método local que el parámetro de salida. Así que podríamos modificar la llamada y la declaración de la función de esta manera: out double result, out string sla. El tipo de var se identifica dinámicamente en la asignación.