Saltar al pie de página
.NET AYUDA

C# Params (Cómo Funciona para Desarrolladores)

La palabra clave params en C# es una característica poderosa en .NET que permite a un método aceptar un número variable de argumentos. Esto puede simplificar significativamente la sintaxis al llamar métodos que requieren un número variable de parámetros. En esta guía integral, exploraremos la palabra clave params en C#, su sintaxis, casos de uso y mejores prácticas. Más adelante en este artículo, presentaremos la biblioteca IronPDF de Iron Software y explicaremos cómo usar la palabra clave params e IronPDF para generar PDFs.

¿Qué es el tipo de argumento Params de C#?

En el ámbito de C#, los métodos generalmente se adhieren a un conjunto predeterminado de parámetros. No obstante, existen situaciones donde uno podría encontrarse inseguro sobre el número preciso de argumentos destinados a un método. Aquí entra la palabra clave "params", una solución que permite la especificación de un parámetro de método capaz de acomodar un arreglo de argumentos. Esta funcionalidad resulta invaluable cuando el desarrollador no está seguro sobre el número exacto de argumentos de antemano, facilitando el paso de un número indeterminado u opcional de parámetros, todos del mismo tipo, dentro de una declaración de método.

public class ParamsExample
{
    // Method accepting a variable number of string arguments using the params keyword
    public void PrintMessages(params string[] messages)
    {
        foreach (var message in messages)
        {
            Console.WriteLine(message);
        }
    }
}

// Usage
class Program
{
    public static void Main()
    {
        var example = new ParamsExample();
        example.PrintMessages("Hello", "World", "!");
    }

    // More examples
    public static void AddItemsToShoppingBasket(params string[] items)
    {
        // Implementation to add items to a shopping basket
    }

    public static void AddItemsSumToShoppingBasket(params int[] sum) // Using params with int
    {
        // Implementation to add sum of items to the shopping basket
    }
}
public class ParamsExample
{
    // Method accepting a variable number of string arguments using the params keyword
    public void PrintMessages(params string[] messages)
    {
        foreach (var message in messages)
        {
            Console.WriteLine(message);
        }
    }
}

// Usage
class Program
{
    public static void Main()
    {
        var example = new ParamsExample();
        example.PrintMessages("Hello", "World", "!");
    }

    // More examples
    public static void AddItemsToShoppingBasket(params string[] items)
    {
        // Implementation to add items to a shopping basket
    }

    public static void AddItemsSumToShoppingBasket(params int[] sum) // Using params with int
    {
        // Implementation to add sum of items to the shopping basket
    }
}
$vbLabelText   $csharpLabel

El método AddItemsToShoppingBasket puede ser invocado con un número variable de argumentos de parámetros string. La palabra clave params simplifica la sintaxis para la llamada al método permitiendo a los desarrolladores pasar directamente los parámetros opcionales, sin crear explícitamente una entrada de arreglo.

class Program
{
    public static void Main()
    {
        AddItemsToShoppingBasket("cake", "pizza", "cold drink");
        AddItemsToShoppingBasket("snacks", "burger");
        AddItemsToShoppingBasket(); // Valid even with zero parameters, using default value
    }
}
class Program
{
    public static void Main()
    {
        AddItemsToShoppingBasket("cake", "pizza", "cold drink");
        AddItemsToShoppingBasket("snacks", "burger");
        AddItemsToShoppingBasket(); // Valid even with zero parameters, using default value
    }
}
$vbLabelText   $csharpLabel

Consideraciones y buenas prácticas

  • Colocar los parámetros al final de la lista de parámetros: Se recomienda colocar el parámetro params al final de la lista de parámetros del método. Esta práctica fomenta la claridad y reduce la confusión durante las llamadas a métodos. Los parámetros que requieren valores explícitos deben preceder a los params para una organización efectiva.

  • Especificar explícitamente parámetros que no sean params: al invocar un método con params , asegúrese de proporcionar explícitamente valores para parámetros que no sean params . Esta práctica previene ambigüedades y garantiza la invocación precisa del método con el número requerido de argumentos.

  • Tenga cuidado para evitar ambigüedades: la vigilancia es clave cuando se utilizan params en métodos con múltiples sobrecargas o parámetros del mismo tipo. El compilador puede tener dificultades para determinar el método apropiado a invocar, resultando potencialmente en errores de ambigüedad.

  • Explorar enfoques alternativos: si bien params ofrece conveniencia, considere métodos alternativos en ciertos escenarios. Utilizar colecciones como List podría ser preferible para una funcionalidad mejorada o cuando pasar parámetros nombrados se alinea con tus objetivos.

  • Aplicar con criterio en escenarios relevantes: implemente params con criterio en escenarios donde el recuento de parámetros es variable y puede fluctuar entre distintas llamadas de método. Reservar su uso para situaciones donde el número de parámetros es impredecible, evitando su aplicación cuando el recuento de parámetros es fijo y conocido.

Matriz unidimensional para el tipo de parámetro

AddItemsToShoppingBasket también puede ser usado llamándolo con un array unidimensional.

class Program
{
    public static void Main()
    {
        var items = new string[] { "cold drink", "snack", "roll" }; // 1D string array
        AddItemsToShoppingBasket(items); // Works as expected
        AddItemsToShoppingBasket("cold drink", "coke", "roll"); // Similar result to the above line
    }
}
class Program
{
    public static void Main()
    {
        var items = new string[] { "cold drink", "snack", "roll" }; // 1D string array
        AddItemsToShoppingBasket(items); // Works as expected
        AddItemsToShoppingBasket("cold drink", "coke", "roll"); // Similar result to the above line
    }
}
$vbLabelText   $csharpLabel

Pasar una matriz separada por comas de argumentos del mismo tipo

AddItemsToShoppingBasket puede ser llamado pasando una lista/array de variables en la llamada al método como se muestra a continuación.

class Program
{
    public static void Main()
    {
        // Example method signature
        AddItemsToShoppingBasket("snacks", "burger", "snacks", "burger", "cold drink"); // Comma separated values
        AddItemsToShoppingBasket("snacks");
    }
}
class Program
{
    public static void Main()
    {
        // Example method signature
        AddItemsToShoppingBasket("snacks", "burger", "snacks", "burger", "cold drink"); // Comma separated values
        AddItemsToShoppingBasket("snacks");
    }
}
$vbLabelText   $csharpLabel

Pasar un array del tipo definido

El arreglo debe contener el mismo tipo definido en el método params; de lo contrario, se lanza un error.

// Example that results in an error
AddItemsToShoppingBasket("snacks", 2, "burger"); // Error due to type mismatch
AddItemsToShoppingBasket(2, 3, 4); // Error since params type is string
// Example that results in an error
AddItemsToShoppingBasket("snacks", 2, "burger"); // Error due to type mismatch
AddItemsToShoppingBasket(2, 3, 4); // Error since params type is string
$vbLabelText   $csharpLabel

Ocurre un error de sintaxis si hay un desajuste de tipo respecto a los params definidos en el método.

Siempre el último parámetro del método

No se permiten parámetros adicionales después del parámetro params en una firma de método. Sólo se permite un argumento params en una declaración de parámetros de método. Definirlo incorrectamente conduce a errores de compilación.

class Program
{
    static void Main(string[] args)
    {
        // Example 1
        public static void AddItemsToShoppingBasket(double total, params string[] items)
        {
            // Works fine as `params` is the last parameter
        }

        // Example 2, error scenario
        public static void AddItemsToShoppingBasket(params string[] items, decimal total, int total)
        {
            // Error: `params` keyword must be the last parameter 
        }
    }
}
class Program
{
    static void Main(string[] args)
    {
        // Example 1
        public static void AddItemsToShoppingBasket(double total, params string[] items)
        {
            // Works fine as `params` is the last parameter
        }

        // Example 2, error scenario
        public static void AddItemsToShoppingBasket(params string[] items, decimal total, int total)
        {
            // Error: `params` keyword must be the last parameter 
        }
    }
}
$vbLabelText   $csharpLabel

Sólo una palabra clave params

Sólo se permite un parámetro params en una firma de método. El compilador lanza un error si se encuentra más de una palabra clave params en la firma del método.

class Program
{
    static void Main(string[] args)
    {
        public static void AddItemsToShoppingBasket(params string[] items, params string[] quantity)
        {
            // Compiler Error: Only one params keyword is allowed in the method signature
        }
    }
}
class Program
{
    static void Main(string[] args)
    {
        public static void AddItemsToShoppingBasket(params string[] items, params string[] quantity)
        {
            // Compiler Error: Only one params keyword is allowed in the method signature
        }
    }
}
$vbLabelText   $csharpLabel

Sin argumentos

Si un método tiene un parámetro con la palabra clave params, puede ser llamado sin ningún argumento, y el compilador no lanzará un error.

AddItemsToShoppingBasket(); // Works as expected
AddItemsToShoppingBasket(); // Works as expected
$vbLabelText   $csharpLabel

Para cualquier parámetro con un argumento params, se considera un parámetro opcional y puede ser invocado sin pasar parámetros.

Ejemplo de código

Crea una nueva aplicación de consola. Abre Visual Studio, crea un nuevo proyecto y selecciona el tipo de aplicación de consola.

C# Params (Cómo Funciona para Desarrolladores): Figura 1 - Creación de una nueva aplicación de consola

Ahora añade el siguiente código.

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        List<string> cart = new List<string>();

        void AddItemsToShoppingBasket(params string[] samples)
        {
            for (int i = 0; i < samples.Length; i++)
            {
                cart.Add(samples[i]);
            }
        }

        // Caller code
        Console.WriteLine("Enter the cart items as comma separated values");
        var itemsString = Console.ReadLine();
        if (itemsString != null)
        {
            var items = itemsString.Split(",").ToArray();
            AddItemsToShoppingBasket(items);
        }
        AddItemsToShoppingBasket("Sample1", "Sample2");

        Console.WriteLine("-------------------------------------------------------");
        Console.WriteLine("Display Cart");

        foreach (var item in cart)
        {
            Console.WriteLine(item);
        }
    }
}
using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        List<string> cart = new List<string>();

        void AddItemsToShoppingBasket(params string[] samples)
        {
            for (int i = 0; i < samples.Length; i++)
            {
                cart.Add(samples[i]);
            }
        }

        // Caller code
        Console.WriteLine("Enter the cart items as comma separated values");
        var itemsString = Console.ReadLine();
        if (itemsString != null)
        {
            var items = itemsString.Split(",").ToArray();
            AddItemsToShoppingBasket(items);
        }
        AddItemsToShoppingBasket("Sample1", "Sample2");

        Console.WriteLine("-------------------------------------------------------");
        Console.WriteLine("Display Cart");

        foreach (var item in cart)
        {
            Console.WriteLine(item);
        }
    }
}
$vbLabelText   $csharpLabel

Resultado

C# Params (Cómo Funciona para Desarrolladores): Figura 2 - Salida del código arriba

Presentación de IronPDF

La biblioteca IronPDF C# PDF de Iron Software es una biblioteca versátil que puede leer, escribir y manejar documentos PDF en C#. Soporta todo tipo de desarrollo de aplicaciones modernas como Móvil, Sitio Web, Escritorio, Docker, etc. Y también soporta diferentes sistemas operativos como Windows, Linux, Unix, etc. No depende de métodos nativos de SO.

IronPDF se destaca en la conversión de HTML a PDF, asegurando la preservación precisa de los diseños y estilos originales. Es perfecto para crear PDFs a partir de contenido basado en la web como informes, facturas y documentación. Con soporte para archivos HTML, URLs y cadenas HTML en bruto, IronPDF produce fácilmente documentos PDF de alta calidad.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
$vbLabelText   $csharpLabel

Instalación

La biblioteca IronPDF se puede instalar usando el gestor de paquetes NuGet con el siguiente comando o usando el gestor de paquetes de Visual Studio.

Install-Package IronPdf

Utilizar IronPDF para generar un PDF

Ahora usaremos IronPDF para generar el documento PDF desde el ejemplo anterior.

using System;
using System.Collections.Generic;
using System.Linq;
using IronPdf;

class Program
{
    public static void Main()
    {
        List<string> cart = new List<string>();

        void AddItemsToShoppingBasket(params string[] items)
        {
            for (int i = 0; i < items.Length; i++)
            {
                cart.Add(items[i]);
            }
        }

        // Take input from console
        Console.WriteLine("Enter the cart items as comma separated values");
        var itemsString = Console.ReadLine();

        // Read the items
        if (itemsString != null)
        {
            var items = itemsString.Split(",").ToArray();
            AddItemsToShoppingBasket(items);
        }

        // Add to cart
        AddItemsToShoppingBasket("Sample1", "Sample2");

        Console.WriteLine("------------------------------------------------");
        Console.WriteLine("Display Cart");
        Console.WriteLine("------------------------------------------------");

        string name = "Sam";
        var count = cart.Count;
        string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} items in the cart.</p>
" +
        string.Join("\n", cart.Select(x => $"<p>{x}</p>"))
        + @"
</body>
</html>";

        // Create a new PDF document
        var pdfDoc = new ChromePdfRenderer();
        pdfDoc.RenderHtmlAsPdf(content).SaveAs("cart.pdf");
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using IronPdf;

class Program
{
    public static void Main()
    {
        List<string> cart = new List<string>();

        void AddItemsToShoppingBasket(params string[] items)
        {
            for (int i = 0; i < items.Length; i++)
            {
                cart.Add(items[i]);
            }
        }

        // Take input from console
        Console.WriteLine("Enter the cart items as comma separated values");
        var itemsString = Console.ReadLine();

        // Read the items
        if (itemsString != null)
        {
            var items = itemsString.Split(",").ToArray();
            AddItemsToShoppingBasket(items);
        }

        // Add to cart
        AddItemsToShoppingBasket("Sample1", "Sample2");

        Console.WriteLine("------------------------------------------------");
        Console.WriteLine("Display Cart");
        Console.WriteLine("------------------------------------------------");

        string name = "Sam";
        var count = cart.Count;
        string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} items in the cart.</p>
" +
        string.Join("\n", cart.Select(x => $"<p>{x}</p>"))
        + @"
</body>
</html>";

        // Create a new PDF document
        var pdfDoc = new ChromePdfRenderer();
        pdfDoc.RenderHtmlAsPdf(content).SaveAs("cart.pdf");
    }
}
$vbLabelText   $csharpLabel

En el código anterior, estamos generando un documento HTML para los ítems del carrito y luego guardándolo como un documento PDF usando IronPDF.

Resultado

C# Params (Cómo Funciona para Desarrolladores): Figura 3 - Salida PDF del código arriba

Licencia (Prueba gratuita disponible)

IronPDF requiere una clave de licencia para funcionar en producción. Se puede obtener una clave de prueba desde la página de licencia aquí. Coloca la clave en appsettings.json.

"IronPdf.LicenseKey": "your license key"

Proporciona tu correo electrónico para recibir una licencia de prueba.

Conclusión

La palabra clave params en C# ofrece una forma flexible de manejar métodos que requieren un número variable de parámetros. Simplifica las llamadas a métodos y hace que el código sea más legible y mantenible. Junto con IronPDF, es una gran combinación de habilidades para cualquier programador que quiera escribir código limpio.

Preguntas Frecuentes

¿Qué es la palabra clave 'params' en C#?

La palabra clave 'params' en C# permite que un método acepte un número variable de argumentos, simplificando la sintaxis para llamar a métodos con diferentes cantidades de parámetros.

¿Cómo funciona la palabra clave 'params' en una firma de método?

En una firma de método, la palabra clave 'params' se utiliza antes del tipo de parámetro y el nombre del parámetro, permitiendo que el método acepte cualquier número de argumentos de ese tipo como un array.

¿Puede un método con 'params' aceptar cero argumentos?

Sí, un método con un parámetro 'params' puede ser llamado sin argumentos, ya que el parámetro 'params' se trata como opcional.

¿Cuáles son las mejores prácticas para usar 'params' en C#?

Las mejores prácticas incluyen colocar el parámetro 'params' al final de la lista de parámetros, especificar los parámetros que no son 'params' explícitamente y usarlo juiciosamente solo cuando el número de parámetros puede variar.

¿Puede un método de C# tener más de un parámetro 'params'?

No, un método de C# solo puede tener un parámetro 'params' y debe ser el último parámetro en la firma del método.

¿Cómo puede el uso de 'params' mejorar la flexibilidad de los métodos en C#?

Usar 'params' en métodos de C# permite a los desarrolladores escribir código más flexible que puede manejar un número dinámico de parámetros, facilitando su mantenimiento y extensión.

¿Cómo se puede combinar la palabra clave 'params' con una biblioteca de C# para generar documentos?

La palabra clave 'params' se puede usar con una biblioteca de C# para pasar un número flexible de parámetros para tareas de generación de documentos, como crear PDFs con contenido variable usando IronPDF.

¿Cómo se puede convertir HTML a PDF usando una biblioteca de C#?

Puedes usar una biblioteca de C# como IronPDF para convertir HTML a PDF utilizando métodos como RenderHtmlAsPdf para cadenas HTML o RenderHtmlFileAsPdf para archivos HTML.

¿Cuáles son algunos casos de uso comunes para la palabra clave 'params' en C#?

Los casos de uso comunes para la palabra clave 'params' incluyen métodos que necesitan manejar un número variable de entradas, como mensajes de registro, operaciones matemáticas o construcción de salidas de texto.

¿Cómo se integra una biblioteca de C# para manipulación de PDF en un proyecto?

Para integrar una biblioteca de C# para manipulación de PDF, como IronPDF, puedes instalarla usando NuGet con el comando dotnet add package [LibraryName] y luego usar su API para realizar tareas de PDF.

Jacob Mellor, Director de Tecnología @ Team Iron
Director de Tecnología

Jacob Mellor es Director de Tecnología en Iron Software y un ingeniero visionario que lidera la tecnología PDF en C#. Como el desarrollador original detrás de la base de código central de Iron Software, ha moldeado la arquitectura de productos de la compañía desde ...

Leer más