02 Aug 2024 - Matthias Voigt
C# hat ein mächtiges Feature namens Discriminated Unions eingeführt, das es Entwicklern ermöglicht, Typen zu definieren, die verschiedene Formen annehmen können. Dieses Konzept, das oft in funktionalen Programmiersprachen zu finden ist, kann nun in C# genutzt werden, um robusteren und ausdrucksstärkeren Code zu schreiben.
Hier ein Beispiel, wie man Discriminated Unions in C# implementiert und verwendet:
using System;
union Shape
{
Circle(double Radius);
Rectangle(double Width, double Height);
Square(double Side);
}
public class Program
{
public static double CalculateArea(Shape shape) => shape switch
{
Circle(var radius) => Math.PI * radius * radius,
Rectangle(var width, var height) => width * height,
Square(var side) => side * side,
_ => throw new ArgumentException("Unknown shape", nameof(shape))
};
public static void Main()
{
Shape myCircle = new Circle(5);
Shape myRectangle = new Rectangle(4, 6);
Shape mySquare = new Square(3);
Console.WriteLine($"Fläche des Kreises: {CalculateArea(myCircle)}");
Console.WriteLine($"Fläche des Rechtecks: {CalculateArea(myRectangle)}");
Console.WriteLine($"Fläche des Quadrats: {CalculateArea(mySquare)}");
}
}
Discriminated Unions erweitern die Fähigkeit von C#, komplexe Datenstrukturen zu handhaben, und bieten ausdrucksstärkeren und sichereren Code. Entwickler sollten jedoch die potenziellen Nachteile, einschließlich erhöhter Komplexität und Kompatibilitätsproblemen, berücksichtigen.
Für mehr Informationen kannst du das Type Unions Proposal nachlesen.