C# begrüßt Union Types im November – ein Schritt, der die Sprache näher an F# und Rust heranbringt

Dev & Code Sep 3, 2026Zu Lesezeichen hinzufügen

C# begrüßt Union Types im November – ein Schritt, der die Sprache näher an F# und Rust heranbringt

Microsoft bestätigt über The Register die Einführung von Union-Typen in C# im November 2026. Eine Funktion, die TypeScript, Rust, Swift und F# schon lange haben und die die Art und Weise, wie Geschäftslogik in C# modelliert wird, verändert.

Der konkrete Fall

Wie oft haben wir in C# diesen Code geschrieben, um einen Zustand darzustellen, der drei verschiedene Formen annehmen kann?

public class RésultatPaiement
{
 public bool EstSuccès { get; set; }
 public string? IdTransaction { get; set; }
 public bool EstEnAttente { get; set; }
 public string? RaisonAttente { get; set; }
 public bool EstErreur { get; set; }
 public string? CodeErreur { get; set; }
 public string? MessageErreur { get; set; }
}

Ein Objekt, bei dem drei boolesche Werte sich gegenseitig ausschließen, fünf nullable Felder, die nur in Kombination mit einem bestimmten booleschen Wert Sinn ergeben, und keine Garantie des Compilers, dass wir keinen Fall im if/else vergessen. Willkommen in der modellierung durch Konvention, die auf der Disziplin des Entwicklers beruht – also auf nicht viel.

Was passiert

The Register kündigt am 2. September 2026 an, dass Microsoft die Einführung von Union-Typen – auch „discriminated unions“ oder „sum types“ genannt – in C# im November 2026 bestätigt hat.

Die Idee ist einfach: Statt eines Objekts mit fünf Feldern, das „ein Erfolg, eine Wartezeit oder ein Fehler sein kann“, erklärt man dem Compiler explizit, dass der Typ einer von drei sich gegenseitig ausschließenden Fällen ist, jeweils mit seinen eigenen relevanten Feldern.

In Pseudo-C# (die finale Syntax wird noch offiziell bekannt gegeben):

public union RésultatPaiement
{
 Succès(string IdTransaction);
 Attente(string Raison);
 Erreur(string Code, string Message);
}

// Verwendung
switch (résultat)
{
 case RésultatPaiement.Succès s:
 Console.WriteLine($"Transaktion {s.IdTransaction}");
 break;
 case RésultatPaiement.Attente a:
 Console.WriteLine($"In Bearbeitung: {a.Raison}");
 break;
 case RésultatPaiement.Erreur e:
 Console.WriteLine($"Fehler {e.Code}: {e.Message}");
 break;
 // Der Compiler wird fehlende Fälle melden
}

Der Compiler prüft die Vollständigkeit des switch: Einen Fall zu vergessen wird zu einem Fehler, nicht zu einem Produktionsbug, der sechs Monate später gefunden wird.

Warum das bedeutend ist

F#, der funktionale Cousin von C# im gleichen .NET-Ökosystem, hat die discriminated unions schon immer – es ist eines der historischen Verkaufsargumente der Sprache. Rust hat sie zu einem Grundpfeiler seines Designs gemacht (die berühmten enum und das match). Swift ebenfalls. TypeScript hat die Union-Typen seit 2015. Kotlin hat die sealed class, die sich dem Pattern annähern. C# kam mit Verspätung – man musste sich mit abstrakten Klassenhierarchien, sealed record oder OneOf<T1,T2,T3> aus Drittbibliotheken behelfen.

Drei konkrete Folgen dieser Einführung:

  1. Die fachliche Modellierung wird ehrlicher. Zustände, die man bisher durch Konvention als sich gegenseitig ausschließend darstellte, werden zu Typen. Der Compiler wird zum Verbündeten, um nichts zu vergessen.
  2. Bibliotheken wie OneOf und LanguageExt werden sich neu organisieren. Ein Teil dessen, was sie boten, wird nativ; der Rest (Monaden, partielle Anwendung) bleibt nützlich.
  3. Die Grenze zwischen C# und F# verschwimmt noch ein wenig mehr. F# wird seine Stärken behalten (stärkere Typhinferenz, Pipeline |>, Standard-Immutabilität), aber die Lücke schließt sich – die Frage nach der Sprachwahl in einem .NET-Projekt stellt sich anders.

Was vor dem Einsatz zu prüfen ist

  • Die finale Syntax: Microsoft hat die finale Spezifikation noch nicht veröffentlicht. Die obigen Beispiele sind illustrativ.
  • Die Interoperabilität: Wie sich die Unions in C# in JSON serialisieren, sich in Entity Framework verhalten oder in WCF/gRPC exponiert werden. Diese Details werden ihre tatsächliche Akzeptanz bestimmen.
  • Die Kompatibilität: Die Unions werden wahrscheinlich in C# 14+ mit .NET 10 eingeführt. Projekte auf historischem .NET Framework oder .NET 8 LTS müssen warten.

Fazit

Die Union-Typen in C#, das ist F#, das in C# einfließt – die redaktionelle Linie von Mads Torgersen (Lead-Designer von C#) seit einigen Versionen. Für unsere Projekte ist der unmittelbarste Nutzen die Modellierung von API-Ergebnissen (Erfolg/Fehler/Teilerfolg), von Workflow-Zuständen (Entwurf/in Prüfung/veröffentlicht) und von polymorphen Payloads (Event Sourcing, Kafka-Nachrichten).

Es ist keine Revolution – andere große Sprachen haben das seit 10 Jahren. Aber für das .NET-Unternehmens-Ökosystem, in dem C# die dominierende Sprache in der Business-Logik bleibt, ist es ein qualitativer Sprung in der Zuverlässigkeit des Typsystems. Ab November in der Preview testen.

Resources

Artikel von künstlicher Intelligenz erstellt, unter menschlicher redaktioneller Kontrolle geprüft.

Unsere Redaktion
Your Linux server, as a desktop.
TermalOSSponsored
Ops, reimagined

Your Linux server, as a desktop.

Agentless SSH monitoring, a full remote desktop and an AI ops copilot — no agents to install, everything stays on your machine.

SSHSelf-hostedAI Ops
Get early access
War dieser Artikel hilfreich?

19 Personen gefiel dieser Artikel

Gefällt mir
K
Kaito KuroganeSenior-Redakteur (m/w/d)
Senior-Entwickler mit breitem Spektrum, Backend Go + Frontend TS, Open-Source-Beiträger
Teilen:
Your Linux server, as a desktop.
TermalOSSponsored
Ops, reimagined

Your Linux server, as a desktop.

Agentless SSH monitoring, a full remote desktop and an AI ops copilot — no agents to install, everything stays on your machine.

Get early access
LIVERadio Geek Kitsune
Tippen zum Hören – für alle derselbe Sound
0··
// Programm
// all stations
// Track teilen →
Themen
Erkunden
Informationen