switch ifadesi (C# Başvurusu)
C# 8,0 ' den başlayarak, bir switch giriş ifadesiyle bir model eşleşmesi temelinde aday ifadeler listesinden tek bir ifadeyi değerlendirmek için ifadesini kullanın. switchDeyim bağlamında-LIKE semantiğini destekleyen deyim hakkında daha fazla bilgi için switch , bkz. seçim deyimleri makalesinin switch deyim bölümü.
Aşağıdaki örnek switch , bir enum çevrimiçi Haritada temsil eden görsel yönlerinin değerlerini karşılık gelen Kardinal yönlere dönüştüren bir ifadeyi gösterir:
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
}
}
Yukarıdaki örnekte, bir ifadenin temel öğeleri gösterilmektedir switch :
- Anahtar sözcüğü tarafından izlenen bir ifade
switch. Yukarıdaki örnekte,directionYöntem parametresidir. - Virgülle ayırarak
switchifade kolları. Herswitchifade ARM bir model, isteğe bağlı bir Case Guard,=>belirteç ve bir ifade içerir.
Yukarıdaki örnekte, bir switch ifade aşağıdaki desenleri kullanır:
- Sabit bir model: numaralandırmanın tanımlı değerlerini işlemek için
Direction. - Bir atma deseninin: karşılık gelen bir numaralandırma üyesine sahip olmayan herhangi bir tamsayı değerini işlemek için
Direction(örneğin,(Direction)10). Bu,switchifadeyi ayrıntılıhale getirir.
Önemli
İfade tarafından desteklenen desenler switch ve daha fazla örnek hakkında daha fazla bilgi için bkz. desenler.
Bir ifadenin sonucu, switch switch stili giriş ifadesiyle eşleşen ve durum koruyucusu varsa, olarak değerlendirilen ilk ifade ARM ifadesinin değeridir true . switchİfade kolları metin düzeninde değerlendirilir.
switchDaha yüksek bir switch ifade ARM, tüm değerleriyle eşleştiğinden derleyici bir hata oluşturur.
Örnek olay koruyucuları
Bir örüntü, bir ARM ifadesinin değerlendirmesi için koşul belirtmek üzere yeterince ifade edilebilir. Böyle bir durumda, bir Case Guard kullanabilirsiniz. Bu, eşleşen bir Düzenle birlikte karşılanması gereken ek bir durumdur. Case Guard bir Boole ifadesi olmalıdır. whenAşağıdaki örnekte gösterildiği gibi, bir kalıbı izleyen anahtar sözcükten sonra bir Case Guard belirtirsiniz:
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),
};
Önceki örnekte, iç içe geçmiş var desenleriyle özellik desenleri kullanılmaktadır.
Ayrıntılı olmayan anahtar ifadeleri
Bir switch ifadenin desenlerinin hiçbiri bir giriş değeriyle eşleşirse, çalışma zamanı bir özel durum oluşturur. .NET Core 3,0 ve sonraki sürümlerinde, özel durum bir ' dır System.Runtime.CompilerServices.SwitchExpressionException . .NET Framework, özel durum bir olur InvalidOperationException . Bir switch ifade tüm olası giriş değerlerini işlemezse derleyici bir uyarı oluşturur.
İpucu
Bir switch ifadenin tüm olası giriş değerlerini işlediğini garantilemek için, bir switch atma düzeniylebir ifade ARM sağlayın.
C# dili belirtimi
Daha fazla bilgi için, özellik teklifi notunun switch ifade bölümüne bakın.