C# Switch Case Nedir, Örnekli Nasıl Kullanılır?

C# swicth case yapısı çoğu programlama dilinde yerleşik olarak bulunur ve switch case kullanımı neredeyse aynıdır bizde if-else ile yapılan kontrolleri switch case ile nasıl yapıldığını ve çeşitli kullanımlarını bol örneklerle göreceğiz.

C# Switch Case Nedir, Örnekli Nasıl Kullanılır?

C# Switch Case Nedir, Örnekli Nasıl Kullanılır?

Giriş metninde if-else ile yapılan kontrollerin c# switch case yapısı ile nasıl yapılabileceğini vurgulamıştık if-else yapıları için alternatif olarak kullanabileceğiniz bir yapıdır.

Ufak bir örnek ile if-else ve switch case yapısının nasıl kullanılabileceğini görelim.

If-Else

Şimdide If Else ile yazdığımız örneği switch case ile nasıl yazıldığına gözatalım.

Switch Case

Switch case’i bu örnek üzerinden anlatmak gerekirse switch parantezleri arasına aldığımız number adlı değişkene sahip değer  case ile işaretlediğimiz ilgili değere direkt olarak yönlendirilip ilgili case bloğunun break ile durdurma bölgesi olarak işaretlediğimiz kısma kadarki kod bloklarımız çalışmış olacaktır eğer break; satırı unutulur ise compile time’da hata fırlatılacaktır, üstteki örnekte number değişkeninin değeri 1 olduğu için case 1 bloğu çalışacaktır.

default bloğu if-else kontrolündeki else’e karşılık gelmektedir eğer number içerisindeki değer hiçbir case bloğundaki değer ile eşleşmiyor ise default bloğu çalıştırılacaktır.

Sonuç

Üstteki sonuç demosunda yer alan kod bloklarına Random sınıfı dahil edildi böylelikle 0=<3 arasındaki değer üretildiğinde hangi case bloklarının çalıştığını dinamik olarak görebiliyor olacağız.

Birden Fazla Case İçin Aynı Bloğu Çalıştırma

Bu duruma verilebilecek en iyi örnek DateTime.Now.DayOfWeek enum’ı ile haftanın günleri için verilen sayısal değere göre haftaiçi yada haftasonunda olup olmadığımızı ekrana yazdırmak olacaktır.

Dotnetfiddle sistem saati gününe göre yani bugün için dinamik olarak ilgili case bloğu çalıştırılıyor olacaktır.

Sonuç

Üstteki kod bloğunu isterseniz şu şekilde değiştirip kodu kısaltabilirsiniz DateTime.Now.DayOfWeek özelliğinin dönebileceği 7 tür enum vardır siz bu durumda şunu yapabilirsiniz hafta sonu günleri olan cumartesi ve pazar için case bloğu yazıp hafta içi için yazdığımız case bloklarını silip default: bloğuna alttaki gibi yazarakda kodunuzu kısaltabilirsiniz. Bunu if-else yapısında else bloğunda yapabiliyoruz zaten ve default: ifadesinin else ifadesine karşılık geldiğini de daha önce paylaşmıştık.

Üstteki kodu switch-case-default yapısını kullanacak şekilde yaparsak son hali şu olmalı.

C# 7 ile switch-case yapımızda referans tiplerinin artık kullanabiliyoruz şimdiki örneğimizde bunun üzerine referans tiplerini kullanarak akışı nasıl yönlendirebileceğimizi göreceğiz.

C# 7 Switch Case Referans Tipi Karşılaştırması

Sonuç

Peki üstteki kodu if-else bloğu ile yazabilir miydik? Tabiki yazabiliriz altta örnek kod bloğunu görebilirsiniz.

Referans Tipi Eşleştirmeleri İçin Alternatif Olarak If-Else blokları İle Çalışmak

Case Bloğunda When Kullanımı

C# 7 ile beraber gelen bu özellikle case bloklarında when ile koşul belirterek bu koşula göre case bloğunun çalışıp çalışmamasını sağlayabilirsiniz bununla ilgili altta basit bir örnek yer almaktadır.

Alttaki kod bloğunda göreceğiniz üzere senaryomuz şudur;

  • En temel anlamda yer alan Person sınıfı var Employee, Boss ve Secretary sınıfları tarafından miras alınarak türetilmektedir.
  • Case bloklarında when ifadesini kullanarak Age ve Name özelliğine göre mantıksal ifadeler oluşturuldu bu when kısmında tanımlanan ifadeler true olarak sonuçlandığında case bloğu işletilecektir.

Şimdi hemen koda geçelim ve sonuç kısmında case bloklarında kullanılan when ifadesi ile nasl çalıştığını ne gibi sonuç ortaya çıktığına gözatalım.

Sonuç

 


C# Switch Case Yapısı İçin Kullanılacak Türler

C# 6 ve öncesinde switch case bloklarında herhangi bir değer türü kullanılabilmektedir.

  • char
  • array
  • bool
  • int, long gibi diğer sayısal değerler
  • enum

C# 7 kullananlar üsttekiler dahil referans türü değişkenleri veya değerleri kullanabilirler ama null değer eşleşmesi case bloklarında yapılamamaktadır örnek olarak case null: şeklinde bir ifade oluşturabilirsiniz ve “compile time” aşamasında ve çalışmasında bir problem çıkmaz ama null bir referans tip geldiğinde bu eşleşmeyi C# sağlamayacaktır bu yüzden null değeri case ifadelerinizde kullanamazsınız.


C# Switch Case Yapısı İçin Önemli Bazı Kurallar

  • Case ifadeleri arasında akışı yönetebilir farklı bir case bloğunu çalıştırabilirsiniz bunun için goto anahtar kelimesini kullanabilirsiniz.
  • Default bloğunu en alta yazma gibi zorunluluk yoktur istenilen sıralamaya göre yazılabilir ama best practise olarak en alta yazılması önerilir ve default bloğunun kullanılmasıda zorunlu değildir.
  • Switch yapısı içerisinde aynı değere sahip 2 case ifadesi kullanılamaz.
  • İç içe switch case yapısını kullanabilirsiniz.
  • Birden fazla case ifadesi için aynı kod bloklarını çalıştırmak için case bloklarını üst üste yazıp tek bir gövde tanımlayabilirsiniz üstte bununla ilgili bir örnek vermiştik.
  • Swith parantezi içerisinde tanımladığımız değişken değeri türü ile case ifadelerinde kullandığımız değer türü aynı olmalıdır int-int, string-string, enum-enum v.b. gibi.
  • return yada goto kullandığınız case bloklarında break ifadesini kullanmanıza gerek yoktur(tabi goto ve return eğer break ile aynı konumda akışı kesiyor yada yönlendiriyor ise).

C# switch case yapısı ile ilgili daha farklı örnek, olumlu-olumsuz tüm görüşeriniz için bana yorum yada mail yolu ile ulaşabilirsiniz.

Makalede kullanılan tüm örneklere ve C# ile ilgili diğer tüm örneklere github hesabımdan erişebilirsiniz buraya tıklayıp github hesabıma erişebilirsiniz.


En güncel içeriklerden faydanmak istemez misin?

[contact-field required="1" type="name" label="İsim"/][contact-field required="1" type="email" label="E-posta"/][contact-field type="consent" implicitconsentmessage="Bilgilerinizi göndererek, size e-posta göndermemize izin vermiş olursunuz. İstediğiniz zaman abonelikten çıkabilirsiniz." explicitconsentmessage="Zaman zaman size e-posta gönderebilir miyiz?" label="İzin"/]
5/5 - (11 votes)

Murat Öner sitesinden daha fazla şey keşfedin

Okumaya devam etmek ve tüm arşive erişim kazanmak için hemen abone olun.

Okumaya devam et