AYUDA .NET

C# Switch Expression (Cómo funciona para los desarrolladores)

Publicado en 12 de diciembre, 2023
Compartir:

C# evoluciona continuamente, incorporando funciones que elevan la expresividad del lenguaje y mejoran la experiencia general del desarrollador. Entre estas características, destaca la expresión switch, que sirve como herramienta potente y sucinta para gestionar múltiples condiciones dentro de una única expresión.

Esta completa exploración profundiza en los entresijos de la expresión switch de C#, proporcionando ejemplos que ponen de relieve su sintaxis, aplicaciones y ventajas.

Desde la concordancia de patrones y los valores constantes hasta los patrones de tipo y el uso de palabras clave como "switch" y "case", navegamos por los diversos elementos de esta característica del lenguaje. La discusión abarca varios patrones, como los patrones constantes, los patrones relacionales y los patrones de tipo, elucidando sus funciones dentro del contexto de la expresión switch.

Además, examinamos la incorporación de expresiones de conmutación en escenarios del mundo real, mostrando su utilidad y proporcionando claridad sobre su sintaxis e implementación. Para obtener más información sobre las expresiones de conmutación, visite este enlaceDocumentación de Microsoft sobre expresiones de cambio en C#.

En este artículo, repasaremos los ejemplos de expresiones de conmutación y probaremos su caso de uso utilizando la funciónBiblioteca PDF IronPDF C#.

1. Introducción a Switch Expression

La expresión switch, introducida en C# 8.0, representa un cambio de paradigma en la forma en que los desarrolladores manejan la lógica condicional. Tradicionalmente, la sentencia switch era la opción preferida para la bifurcación basada en diferentes valores, pero tenía limitaciones en términos de verbosidad y flexibilidad cuando se utilizaban palabras clave. La expresión switch aborda estas preocupaciones proporcionando una sintaxis concisa que permite un código más expresivo y funcional.

En su forma más simple, la expresión switch se parece a una sentencia switch tradicional, pero es más versátil. Evalúa una expresión y selecciona una rama en función del valor de dicha expresión. Este cambio de paradigma permite a los desarrolladores escribir un código más limpio y legible con menos repeticiones.

2. Sintaxis y uso básico

La sintaxis de la expresión switch de C# es intuitiva, por lo que resulta fácil de adoptar para los desarrolladores familiarizados con las sentencias switch tradicionales. He aquí un ejemplo básico:

string result = input switch 
{ 
    "case1" => "Result for case 1",
    "case2" => "Result for case 2",
    _ => "Default result for case label" 
};
string result = input switch 
{ 
    "case1" => "Result for case 1",
    "case2" => "Result for case 2",
    _ => "Default result for case label" 
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

En este ejemplo, la variable entrada se evalúa con respecto a varios casos. Si el patrón coincide con uno de los casos especificados, el resultado correspondiente se asigna a la variable resultado. El guión bajo(_) representa el caso opcional por defecto, similar a la palabra clave default en una sentencia switch tradicional.

La expresión switch admite una amplia gama de patrones, incluidos patrones constantes, patrones de tipo, patrones relacionales, etc., lo que la convierte en una herramienta versátil para manejar escenarios complejos. Puede ser particularmente útil cuando se trata de enumeraciones, evitando la necesidad de repetitivas declaraciones case.

3. Patrones avanzados y deconstrucción

Uno de los puntos fuertes de la expresión switch reside en su capacidad para trabajar con patrones avanzados y deconstrucción. Esto permite a los desarrolladores extraer valores de objetos, matrices y patrones de forma concisa. Considere el siguiente ejemplo de una expresión de conmutación:

var result = shape switch 
{ 
    (Circle c) => $"Circle with radius {c.Radius}",
    (Rectangle r) => $"Rectangle with dimensions {r.Length}x{r.Width}",
    _ => "Unknown shape" 
};
var result = shape switch 
{ 
    (Circle c) => $"Circle with radius {c.Radius}",
    (Rectangle r) => $"Rectangle with dimensions {r.Length}x{r.Width}",
    _ => "Unknown shape" 
};
'INSTANT VB TODO TASK: The following 'switch expression' was not converted by Instant VB:
'var result = shape switch
'{ 
'	(Circle c) => $"Circle with radius {c.Radius}",
'	(Rectangle r) => $"Rectangle with dimensions {r.Length}x{r.Width}",
'	_ => "Unknown shape"
'};
VB   C#

En este caso, el valor de entrada inicial, la variable shape se descompone en sus componentes(Círculo o rectángulo)y se genera el mensaje adecuado en función del tipo y los valores.

4. Expresión de conmutación frente a sentencia de conmutación

Aunque la expresión switch comparte similitudes con el patrón semántico switch-like tradicional, ofrece varias ventajas. La expresión de la palabra clave switch es más concisa, eliminando la necesidad de declaraciones break-case y reduciendo el código boilerplate. También permite asignar valores directamente dentro de la expresión, lo que hace que el código sea más expresivo.

Otra característica destacable es la posibilidad de utilizar expresiones de la expresión switch en una expresión lambda o como parte de un miembro con cuerpo de expresión en métodos o propiedades, lo que contribuye a un estilo de programación más funcional.

Además, la expresión switch fomenta el uso de la concordancia de patrones constantes, proporcionando una forma más natural y potente de manejar diferentes casos.

5. Consideraciones sobre el rendimiento y limitaciones

Aunque la expresión switch aporta muchas ventajas, es crucial tener en cuenta las consideraciones de rendimiento. En algunos casos, la sentencia switch puede ser más eficaz, especialmente cuando se trata de un gran número de casos. Los desarrolladores deben evaluar los requisitos específicos de su aplicación y elegir la construcción adecuada en consecuencia.

Otra consideración a tener en cuenta es que la expresión switch no puede sustituir a la sentencia switch por completo. Hay casos en los que la sentencia switch, con su comportamiento "fall-through", puede ser la opción preferida.

Además, la expresión switch sólo está disponible en C# 8.0 y versiones posteriores, por lo que los proyectos dirigidos a versiones anteriores no tendrán acceso a esta función.

La característica más destacada de IronPDF es suConversión de HTML a PDF conservando todos los diseños y estilos. Permite generar PDF a partir de contenido web, ideal para informes, facturas y documentación. Los archivos HTML, las URL y las cadenas HTML se pueden convertir en PDF sin esfuerzo.

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");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

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

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

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
VB   C#

6. Aplicación real con IronPDF

La aplicación de la expresión switch de C# es notablemente impactante en escenarios del mundo real, especialmente cuando se gestionan múltiples condiciones o enumeraciones, como se ejemplifica en un caso de uso de IronPDF. Exploremos su utilidad en un sistema de clasificación de documentos.

using IronPdf;
using System;
class Program
{
    static void Main()
    {
        // Simulating HTML content for the PDF document
        string htmlContent = GetHtmlContent();
        // Creating IronPDF Document
        var pdfDocument = new ChromePdfRenderer();
        // Converting HTML to PDF
        var pdf = pdfDocument.RenderHtmlAsPdf(htmlContent);
        // Classifying the document based on the page count
        string classification = pdf switch
        {
            { PageCount: 1 } => "Single Page Document",
            { PageCount: >= 2 and <= 10 } => "Small Document",
            { PageCount: > 10 } => "Large Document",
            _ => "Unknown Classification"
        };
        // Save the PDF to a file
        pdf.SaveAs("document_output.pdf");
        // Displaying the classification result
        Console.WriteLine($"PDF created successfully. Document Classification: {classification}");
    }
    static string GetHtmlContent()
    {
        // In a real-world scenario, you would obtain the HTML content from an actual source.
        // For the sake of this example, we'll create a simple HTML string.
        string htmlContent = "<html><body><h1>Hello IronPDF!</h1><p>This is a sample HTML content.</p></body></html>";
        return htmlContent;
    }
}
using IronPdf;
using System;
class Program
{
    static void Main()
    {
        // Simulating HTML content for the PDF document
        string htmlContent = GetHtmlContent();
        // Creating IronPDF Document
        var pdfDocument = new ChromePdfRenderer();
        // Converting HTML to PDF
        var pdf = pdfDocument.RenderHtmlAsPdf(htmlContent);
        // Classifying the document based on the page count
        string classification = pdf switch
        {
            { PageCount: 1 } => "Single Page Document",
            { PageCount: >= 2 and <= 10 } => "Small Document",
            { PageCount: > 10 } => "Large Document",
            _ => "Unknown Classification"
        };
        // Save the PDF to a file
        pdf.SaveAs("document_output.pdf");
        // Displaying the classification result
        Console.WriteLine($"PDF created successfully. Document Classification: {classification}");
    }
    static string GetHtmlContent()
    {
        // In a real-world scenario, you would obtain the HTML content from an actual source.
        // For the sake of this example, we'll create a simple HTML string.
        string htmlContent = "<html><body><h1>Hello IronPDF!</h1><p>This is a sample HTML content.</p></body></html>";
        return htmlContent;
    }
}
Imports IronPdf
Imports System
Friend Class Program
	Shared Sub Main()
		' Simulating HTML content for the PDF document
		Dim htmlContent As String = GetHtmlContent()
		' Creating IronPDF Document
		Dim pdfDocument = New ChromePdfRenderer()
		' Converting HTML to PDF
		Dim pdf = pdfDocument.RenderHtmlAsPdf(htmlContent)
		' Classifying the document based on the page count
'INSTANT VB TODO TASK: The following 'switch expression' was not converted by Instant VB:
'		string classification = pdf switch
'		{
'			{ PageCount: 1 } => "Single Page Document",
'			{ PageCount: >= 2 and <= 10 } => "Small Document",
'			{ PageCount: > 10 } => "Large Document",
'			_ => "Unknown Classification"
'		};
		' Save the PDF to a file
		pdf.SaveAs("document_output.pdf")
		' Displaying the classification result
		Console.WriteLine($"PDF created successfully. Document Classification: {classification}")
	End Sub
	Private Shared Function GetHtmlContent() As String
		' In a real-world scenario, you would obtain the HTML content from an actual source.
		' For the sake of this example, we'll create a simple HTML string.
		Dim htmlContent As String = "<html><body><h1>Hello IronPDF!</h1><p>This is a sample HTML content.</p></body></html>"
		Return htmlContent
	End Function
End Class
VB   C#

En este fragmento de código C#, se utiliza ChromePdfRenderer de IronPDF para convertir contenido HTML simulado en un documento PDF. A continuación, el PDF resultante se somete a una clasificación basada en su número de páginas mediante una expresión de conmutación.

La expresión switch emplea un patrón recursivo para clasificar el documento en distintos tipos, como "Documento de una sola página", "Documento pequeño" o "Documento grande", en función de rangos específicos de recuento de páginas. El documento clasificado se guarda posteriormente en un archivo denominado "documento_salida.pdf", y un mensaje de consola comunica la creación satisfactoria del PDF junto con su resultado de clasificación.

Este enfoque conciso y dinámico muestra la versatilidad de la expresión switch para manejar con eficacia diferentes escenarios, proporcionando una forma racionalizada de categorizar documentos en función de sus propiedades.

6.1. Consola de salida

Expresión de conmutación en C(Cómo funciona para los desarrolladores) Figura 1

7. Conclusión

La expresión switch de C#, introducida en C# 8.0 como evolución fundamental del lenguaje, se ha revelado como una herramienta convincente para que los desarrolladores agilicen la lógica condicional y mejoren la expresividad del código.

Esta exhaustiva exploración ha profundizado en su sintaxis, aplicaciones y ventajas, mostrando su versatilidad a través de ejemplos que emplean varios patrones posicionales y palabras clave como "switch" y "case". Desde su sintaxis intuitiva y su uso básico hasta su patrón de declaración avanzado y sus capacidades de deconstrucción, la expresión switch ha demostrado ser inestimable en la elaboración de código limpio y legible.

La comparación con la sentencia switch tradicional pone de manifiesto su concisión y su compatibilidad con construcciones expresivas, incluidas las expresiones lambda y los miembros con cuerpo de expresión. La capacidad de integrarse a la perfección con bibliotecas externas y contribuir a la generación optimizada de PDF subraya aún más el papel de la expresión switch en el avance de las prácticas modernas de desarrollo en C#.

A medida que C# sigue evolucionando, la expresión switch se erige como testimonio del compromiso del lenguaje de dotar a los desarrolladores de herramientas eficientes y expresivas para la resolución eficaz de problemas.

< ANTERIOR
C# Math (Cómo funciona para desarrolladores)
SIGUIENTE >
NUnit o xUnit .NET Core (Cómo funciona para los desarrolladores)

¿Listo para empezar? Versión: 2024.12 acaba de salir

Descarga gratuita de NuGet Descargas totales: 11,781,565 Ver licencias >