Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Aday ifadeler listesinden switch tek bir ifadeyi değerlendirmek için ifadeyi kullanın. Değerlendirme, giriş ifadesiyle desen eşleşmesini temel alır. Deyim bağlamında -like semantiğini destekleyen switchdeyim hakkında switch bilgi için switch makalesinin deyim bölümüne bakın.
C# dili başvuru belgesi, C# dilinin en son yayımlanan sürümünü gösterir. Ayrıca, yaklaşan dil sürümü için genel önizlemelerdeki özelliklere yönelik ilk belgeleri içerir.
Belgelerde ilk olarak dilin son üç sürümünde veya geçerli genel önizlemelerde sunulan tüm özellikler tanımlanır.
Tip
Bir özelliğin C# dilinde ilk tanıtıldığı zamanları bulmak için C# dil sürümü geçmişi makalesine bakın.
Aşağıdaki örnekte bir switch ifade gösterilmektedir. Çevrimiçi bir haritadaki görsel yönlerini enum temsil eden değerleri ilgili kardinal yönlere dönüştürür:
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 switch ifadenin temel öğeleri gösterilmektedir:
- Bir ifade ve
switchardından anahtar sözcüğü. Yukarıdaki örnekte yöntem parametresidirdirection. - İfade
switchkolları, virgülle ayrılmıştır. Herswitchifade kolu bir desen, isteğe bağlı bir büyük/küçük harf koruyucusu,=>belirteç ve bir ifade içerir.
Yukarıdaki örnekte bir switch ifade aşağıdaki desenleri kullanır:
-
Sabit desen: numaralandırmanın tanımlı değerlerini
Directionişlemek için. -
Atma deseni: Numaralandırmanın karşılık gelen üyesi
Directionolmayan herhangi bir tamsayı değerini işlemek için (örneğin,(Direction)10). Bu desen, ifadeyiswitchkapsamlı hale getirir.
Önemli
İfade tarafından switch desteklenen desenler ve daha fazla örnek için bkz . Desenler.
bir switch ifadenin sonucu, deseni giriş ifadesiyle eşleşen ve varsa büyük/küçük harf koruyucusu olarak değerlendirilen ilk switch ifade kolunun ifadesinin truedeğeridir. İfade switch kolları metin sırasına göre değerlendirilir.
Derleyici, daha yüksek switch bir ifade kolu tüm değerleriyle eşleştiğinden daha düşük switch bir ifade kolu seçilemediğinde bir hata oluşturur.
Servis talebi korumaları
Bir desen, bir arm ifadesinin değerlendirmesinin koşulunu belirtmek için yeterince açıklayıcı olmayabilir. Böyle bir durumda, servis talebi koruyucusu kullanın.
Servis talebi koruyucusu, eşleşen bir desenle birlikte karşılanması gereken başka bir koşuldur. Büyük/küçük harf koruyucu bir Boole ifadesi olmalıdır. Aşağıdaki örnekte gösterildiği gibi, bir deseni when izleyen anahtar sözcüğünden sonra bir servis talebi koruyucusu belirtin:
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),
};
Yukarıdaki örnekte, iç içe vardesenlerine sahip özellik desenleri kullanılır.
Kapsamlı olmayan anahtar ifadeleri
İfadenin switch desenlerinden hiçbiri bir giriş değeriyle eşleşmiyorsa çalışma zamanı bir özel durum oluşturur. .NET Core 3.0 ve sonraki sürümlerde özel durumdur System.Runtime.CompilerServices.SwitchExpressionException. .NET Framework'te özel durum bir InvalidOperationException'dir. Çoğu durumda, bir ifade tüm olası giriş değerlerini işlemezse derleyici bir switch uyarı oluşturur. Tüm olası girişler işlenmediğinde liste desenleri uyarı oluşturmaz.
Tip
bir switch ifadenin tüm olası giriş değerlerini işlediğini garanti etmek içinswitch sahip bir ifade kolu sağlayın.
C# dil belirtimi
Daha fazla bilgi için switch ifade bölümüne bakın.