Home >Backend Development >C++ >How Can We Implement Type-Dependent Logic in C# Without a Direct 'Switch on Type' Feature?

How Can We Implement Type-Dependent Logic in C# Without a Direct 'Switch on Type' Feature?

Linda Hamilton
Linda HamiltonOriginal
2025-01-28 15:16:09182browse

How Can We Implement Type-Dependent Logic in C# Without a Direct

Beyond the Limitations of C#'s 'Switch on Type'

C# doesn't directly support a "switch on type" statement. This limitation arises from the inherent ambiguity in type hierarchies; an object could potentially match multiple cases. However, several elegant workarounds exist to achieve type-dependent logic.

Leveraging Pattern Matching (C# 7 and Later)

Introduced in C# 7, pattern matching offers a concise and readable way to handle type-based logic within switch statements. Observe the example:

<code class="language-csharp">switch (shape)
{
    case Circle c:
        Console.WriteLine($"Circle with radius {c.Radius}");
        break;
    case Rectangle s when (s.Length == s.Height):
        Console.WriteLine($"{s.Length} x {s.Height} square");
        break;
    case Rectangle r:
        Console.WriteLine($"{r.Length} x {r.Height} rectangle");
        break;
    // ... more cases
}</code>

Type Name-Based Switching (C# 6 and Later)

C# 6 and later versions provide the nameof() operator, enabling a switch based on the type's name:

<code class="language-csharp">switch (o.GetType().Name)
{
    case nameof(AType):
        // Handle AType
        break;
    case nameof(BType):
        // Handle BType
        break;
}</code>

String-Based Switching (C# 5 and Earlier)

For older C# versions (5 and below), a string-based switch using the type name is necessary:

<code class="language-csharp">switch (o.GetType().Name)
{
    case "AType":
        // Handle AType
        break;
}</code>

While these methods effectively mimic "switch on type," they might not always offer the same level of elegance or maintainability as a dedicated language feature. The choice depends on the C# version and the desired level of code clarity.

The above is the detailed content of How Can We Implement Type-Dependent Logic in C# Without a Direct 'Switch on Type' Feature?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn