· · 1 menit baca

C# 15 Mendapatkan Tipe Union — Dan Itu Persis Yang Kita Minta

C# 15 memperkenalkan kata kunci `union` — union diskriminasi yang dipaksakan kompiler dengan pencocokan pola yang lengkap. Seperti apa tampilannya, mengapa penting, dan cara mencobanya hari ini.

csharp dotnet union-types pattern-matching dotnet-11 language-features
Postingan ini juga tersedia dalam:English, Català, Español, Deutsch, Français, Português, Italiano, 日本語, 中文, 한국어, Русский, हिन्दी, Polski, Türkçe, العربية, Nederlands

Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, klik di sini.

Inilah yang saya tunggu-tunggu. C# 15 memperkenalkan kata kunci union — union diskriminasi yang tepat dengan pencocokan pola lengkap yang dipaksakan kompiler.

Bill Wagner menerbitkan analisis mendalam.

Masalah yang diselesaikan union

Sebelum C# 15, mengembalikan “salah satu dari beberapa tipe yang mungkin” dari metode selalu merupakan kompromi. Anda tidak pernah mendapatkan apa yang sebenarnya Anda inginkan: kumpulan tipe tertutup di mana kompiler menjamin Anda telah menangani setiap kasus.

Sintaksnya sederhana dengan indah

public record class Cat(string Name);
public record class Dog(string Name);
public record class Bird(string Name);

public union Pet(Cat, Dog, Bird);

Dan inilah keajaibannya — kompiler memaksakan pencocokan lengkap:

string name = pet switch
{
    Dog d => d.Name,
    Cat c => c.Name,
    Bird b => b.Name,
};

Tidak perlu _. Jika Anda nanti menambahkan tipe keempat ke union, setiap ekspresi switch yang tidak menanganinya menghasilkan peringatan.

Di mana ini menjadi praktis

public union ApiResult<T>(T, ApiError, ValidationFailure);

Sekarang setiap konsumen dipaksa untuk menangani sukses, error, dan kegagalan validasi.

Coba hari ini

Tipe union tersedia di .NET 11 Preview 2. Lihat referensi bahasa lengkap.

Bagikan:
Lihat kode sumber postingan ini di GitHub ↗
← Aspire 13.2 Memiliki CLI Dokumentasi — dan Agen AI Anda Bisa Menggunakannya Juga
VS Code 1.115 — Notifikasi Terminal Latar Belakang, Mode Agen SSH, dan Lainnya →