C# Switch Expression (How it Works For Developers)

C# undergoes continuous evolution, incorporating features that elevate the language's expressiveness and enhance the overall developer experience. Among these features, the switch expression is particularly noteworthy, serving as a potent and succinct tool for managing multiple conditions within a single expression.

This comprehensive exploration delves into the intricacies of the C# switch expression, providing examples that highlight its syntax, applications, and advantages.

From pattern matching and constant values to type patterns and the use of keywords like "switch" and "case," we navigate through the diverse elements of this language feature. The discussion encompasses various patterns, such as constant patterns, relational patterns, and type patterns, elucidating their roles within the switch expression context.

Additionally, we examine the incorporation of switch expressions in real-world scenarios, showcasing their utility and providing clarity on their syntax and implementation. For more inside knowledge of switch expressions visit this article.

In this article, we will go through the examples of switch expressions and test their use case using IronPDF C# PDF Library.

1. Introduction to Switch Expression

The switch expression, introduced in C# 8.0, represents a paradigm shift in the way developers handle conditional logic. Traditionally, the switch statement was the go-to choice for branching based on different values, but it had limitations in terms of verbosity and flexibility when keyword used. The switch expression addresses these concerns by providing a concise syntax that allows for more expressive and functional code.

In its simplest form, the switch expression resembles a traditional switch statement but is more versatile. It evaluates an expression and selects a branch based on the value of that expression. This paradigm shift enables developers to write cleaner, more readable code with reduced boilerplate.

2. Syntax and Basic Usage

The syntax of the C# switch expression is intuitive, making it easy to adopt for developers familiar with traditional switch statements. Here's a basic example

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" 
    };
Dim tempVar As String
Select Case input
	Case "case1"
		tempVar = "Result for case 1"
	Case "case2"
		tempVar = "Result for case 2"
	Case Else
		tempVar = "Default result for case label"
End Select
Dim result As String = tempVar
VB   C#

In this example, the input variable is evaluated against multiple cases. If the pattern matches one of the specified cases, the corresponding result is assigned to the result variable. The underscore (_) represents the default optional case, similar to the default keyword in a traditional switch statement.

The switch expression supports a wide range of patterns, including constant patterns, type patterns, type pattern, relational pattern, and more, making it a versatile tool for handling complex scenarios. It can be particularly useful when dealing with enumerations, avoiding the need for repetitive case statements.

3. Advanced Patterns and Deconstruction

One of the strengths of the switch expression lies in its ability to work with advanced patterns and deconstruction. This allows developers to extract values from objects, arrays, and patterns in a concise manner. Consider the following example of a switch expression:

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#

In this case, the initial input value, the shape variable is deconstructed into its components (Circle or Rectangle), and the appropriate message is generated based on the type and values.

4. Switch Expression vs. Switch Statement

While the switch expression shares similarities with the traditional switch-like semantics pattern, it offers several advantages. The switch keyword expression is more concise, eliminating the need for break-case statements and reducing the boilerplate code. It also allows for the assignment of values directly within the expression, making the code more expressive.

Another notable feature is the ability to use expressions from the switch expression in a lambda expression or as part of an expression-bodied member in methods or properties, contributing to a more functional programming style.

Additionally, the switch expression encourages the use of constant pattern matching, providing a more natural and powerful way to handle different cases.

5. Performance Considerations and Limitations

While the switch expression brings many benefits, it's crucial to be aware of performance considerations. In some scenarios, the switch statement might be more performant, especially when dealing with a large number of cases. Developers should assess the specific requirements of their application and choose the appropriate construct accordingly.

Another consideration to note is that the switch expression cannot replace the switch statement entirely. There are cases where the switch statement, with its fall-through behavior, might be the preferred choice.

Additionally, the switch expression is available only in C# 8.0 and later versions, so projects targeting earlier versions won't have access to this feature.

6. Real-world Application with IronPDF

The application of the C# switch expression is notably impactful in real-world scenarios, especially when managing multiple conditions or enumerations, as exemplified in an IronPDF use case. Let's explore its practicality in a document classification system

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#

In this C# code snippet, IronPDF's ChromePdfRenderer is utilized to convert simulated HTML content into a PDF document. The resulting PDF is then subject to classification based on its page count using a switch expression.

The switch expression employs a recursive pattern to categorize the document into different types, such as "Single Page Document," "Small Document," or "Large Document," depending on specific page count ranges. The classified document is subsequently saved to a file named "document_output.pdf," and a console message communicates the successful PDF creation along with its classification result.

This concise and dynamic approach showcases the versatility of the switch expression in efficiently handling different scenarios, providing a streamlined way to categorize documents based on their properties.

6.1. Output Console

C# Switch Expression (How It Works For Developers) Figure 1

7. Conclusion

The C# switch expression, introduced in C# 8.0 as a pivotal evolution in the language, has emerged as a compelling tool for developers to streamline conditional logic and enhance code expressiveness.

This comprehensive exploration has delved into its syntax, applications, and advantages, showcasing its versatility through examples employing various positional patterns and keywords such as "switch" and "case." From its intuitive syntax and basic usage to advanced declaration pattern and deconstruction capabilities, the switch expression has proven invaluable in crafting clean, readable code.

The comparison with the traditional switch statement highlights its conciseness and support for expressive constructs, including lambda expressions and expression-bodied members. The ability to seamlessly integrate with external libraries and contribute to streamlined PDF generation further emphasizes the switch expression's role in advancing modern C# development practices.

As C# continues to evolve, the switch expression stands as a testament to the language's commitment to empowering developers with efficient and expressive tools for effective problem-solving.