Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, kliknij tutaj.
Na to czekałem. C# 15 wprowadza słowo kluczowe union — właściwe dyskryminowane unie z wyczerpującym dopasowaniem wzorców egzekwowanym przez kompilator.
Bill Wagner opublikował głębokie omówienie.
Problem rozwiązywany przez unie
Przed C# 15, zwracanie “jednego z kilku możliwych typów” było zawsze kompromisem. Nigdy nie dostawałeś tego, czego naprawdę chcesz: zamkniętego zbioru typów, gdzie kompilator gwarantuje, że obsłużyłeś każdy przypadek.
Składnia jest pięknie prosta
public record class Cat(string Name);
public record class Dog(string Name);
public record class Bird(string Name);
public union Pet(Cat, Dog, Bird);
A oto magia — kompilator egzekwuje wyczerpujące dopasowanie:
string name = pet switch
{
Dog d => d.Name,
Cat c => c.Name,
Bird b => b.Name,
};
Nie potrzeba _. Jeśli później dodasz czwarty typ do unii, każde wyrażenie switch, które go nie obsługuje, generuje ostrzeżenie.
Zastosowanie praktyczne
public union ApiResult<T>(T, ApiError, ValidationFailure);
Teraz każdy konsument jest zmuszony obsłużyć sukces, błąd i niepowodzenie walidacji.
Wypróbuj już dziś
Typy unii są dostępne w .NET 11 Preview 2. Sprawdź pełną dokumentację.
