ekspresi switch - ekspresi pencocokan pola menggunakan switch
kata kunci
Anda menggunakan switch
ekspresi untuk mengevaluasi ekspresi tunggal dari daftar ekspresi kandidat berdasarkan kecocokan pola dengan ekspresi input. Untuk informasi tentang pernyataan switch
yang mendukung switch
-seperti semantik dalam konteks pernyataan, lihat bagian switch
pernyataan dari artikel Pernyataan pilihan.
Contoh berikut menunjukkan ekspresi switch
, yang mengonversi nilai enum
yang mewakili arah visual di peta online ke arah kardinal yang sesuai:
public static class SwitchExample
{
public enum Direction
{
Up,
Down,
Right,
Left
}
public enum Orientation
{
North,
South,
East,
West
}
public static Orientation ToOrientation(Direction direction) => direction switch
{
Direction.Up => Orientation.North,
Direction.Right => Orientation.East,
Direction.Down => Orientation.South,
Direction.Left => Orientation.West,
_ => throw new ArgumentOutOfRangeException(nameof(direction), $"Not expected direction value: {direction}"),
};
public static void Main()
{
var direction = Direction.Right;
Console.WriteLine($"Map view direction is {direction}");
Console.WriteLine($"Cardinal orientation is {ToOrientation(direction)}");
// Output:
// Map view direction is Right
// Cardinal orientation is East
}
}
Contoh sebelumnya menunjukkan elemen dasar ekspresi switch
:
- Ekspresi yang diikuti oleh kata kunci
switch
. Dalam contoh sebelumnya, ini adalah parameter metodedirection
. switch
lengan ekspresi, dipisahkan dengan koma. Setiap lengan ekspresiswitch
berisi pola, pelindung huruf besar opsional, token=>
, dan ekspresi.
Pada contoh sebelumnya, ekspresi switch
menggunakan pola berikut:
- Pola konstan: untuk menangani nilai yang ditentukan dari enumerasi
Direction
. - Pola buang: untuk menangani nilai bilangan bulat apa pun yang tidak memiliki anggota
Direction
enumerasi yang sesuai (misalnya,(Direction)10
). Itu membuat ekspresiswitch
lengkap.
Penting
Untuk informasi tentang pola yang didukung oleh ekspresi switch
dan contoh lainnya, lihat Pola.
Hasil dari ekspresi switch
adalah nilai ekspresi dari lengan ekspresi pertama switch
yang polanya cocok dengan ekspresi input dan yang pelindung kasusnya, jika ada, dievaluasi menjadi true
. Lengan ekspresi switch
dievaluasi dalam urutan teks.
Pengompilasi menghasilkan kesalahan saat lengan ekspresi switch
yang lebih rendah tidak dapat dipilih karena lengan ekspresi switch
yang lebih tinggi cocok dengan semua nilainya.
Pelindung kasus
Pola mungkin tidak cukup ekspresif untuk menentukan kondisi evaluasi ekspresi lengan. Dalam kasus seperti itu, Anda dapat menggunakan case guard. Penjaga kasus adalah kondisi lain yang harus dipenuhi bersama dengan pola yang cocok. Peindung kasus harus berupa ungkapan bersyarat. Anda menentukan pelindung kasus setelah kata kunci when
yang mengikuti pola, seperti yang ditunjukkan contoh berikut:
public readonly struct Point
{
public Point(int x, int y) => (X, Y) = (x, y);
public int X { get; }
public int Y { get; }
}
static Point Transform(Point point) => point switch
{
{ X: 0, Y: 0 } => new Point(0, 0),
{ X: var x, Y: var y } when x < y => new Point(x + y, y),
{ X: var x, Y: var y } when x > y => new Point(x - y, y),
{ X: var x, Y: var y } => new Point(2 * x, 2 * y),
};
Contoh sebelumnya menggunakan pola properti dengan pola var bersarang.
Ekspresi sakelar yang tidak lengkap
Jika tidak ada pola ekspresi switch
yang cocok dengan nilai input, waktu proses akan menampilkan pengecualian. Di .NET Core 3.0 dan versi yang lebih baru, pengecualiannya adalah System.Runtime.CompilerServices.SwitchExpressionException. Di .NET Framework, pengecualiannya adalah InvalidOperationException. Dalam kebanyakan kasus, pengompilasi menghasilkan peringatan jika ekspresi switch
tidak menghandel semua kemungkinan nilai masukan. Pola daftar tidak menghasilkan peringatan ketika semua input yang mungkin tidak ditangani.
Tip
Untuk menjamin bahwa ekspresi switch
menghandel semua kemungkinan nilai masukan, berikan switch
lengan ekspresi dengan pola buang.
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat bagian switch
ekspresi dari catatan proposal fitur.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk