noisiv 1
noisiv
Manwe Work 1
Manwe Work
Vahsi Uzman 1
Vahsi Uzman
Cannn6161 1
Cannn6161
B 1
berione65
sen272 1
sen272
Mt2Hizmet 1
Mt2Hizmet
C 1
chengdu
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Altın Konu C# - Switch Expression Nasıl Kullanılır

  • Konuyu başlatan Konuyu başlatan lHezarfeNl
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 2
  • Görüntüleme Görüntüleme 187

lHezarfeNl

Love Turkmmo
TM Üye
Katılım
26 Ara 2012
Konular
936
Mesajlar
15,646
Çözüm
8
Online süresi
3mo 29d
Reaksiyon Skoru
2,664
Altın Konu
295
Başarım Puanı
327
MmoLira
664
DevLira
0
Ticaret - 100%
5   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

turkmmo.png

Switch ifadeleri C# programlama dilinde kullandığımız temel ifadelerden biridir.

İlk olarak klasik bir switch ifadesi örneği yazalım. Sade bir şekilde, verilen gün indeksine ait günün ismini dönen bir kod bloğu olsun.
Kod:
int day = 1;
string dayName;
switch (day)
{
    case 1 : dayName = "Pazartesi";
        break;
    case 2 : dayName = "Sali";
        break;
    case 3 : dayName = "Carsamba";
        break;
    case 4 : dayName = "Persembe";
        break;
    case 5 : dayName = "Cuma";
        break;
    case 6 : dayName = "Cumartesi";
        break;
    case 7 : dayName = "Pazar";
        break;
    default: dayName = "Hatali Gun!";
        break;
}
Console.WriteLine(dayName);
Yukarıdaki kod bloğunda da aslında büyük bir sorun diyebileceğimiz bir şey yoktur fakat, case sayısı arttıkça, bu blok uzayacak ve aslında kodda kalabalık yapacak "case", ":", "break" keywordleri eklememiz gerekecek. Bu tarz sadece string atama yaptığımız bir switch bloğunu aşağıdaki gibi daha sade bir şekilde ve daha kolay genişletebilir hale getirebiliriz.

Kod:
int day = 1;
string dayName = day switch
{
    1 => "Pazartesi",
    2 => "Sali",
    3 => "Carsamba",
    4 => "Persembe",
    5 => "Cuma",
    6 => "Cumartesi",
    7 => "Pazar",
    _ => "Hatali Gun!"
};
Console.WriteLine(dayName);
Bu şekilde de string atama kontrolümüzü daha okunur bir şekilde yapabilirsiniz.

Farkedeceğiniz üzere son kısımda yer alan "_" kısmı, klasik switch ifadesindeki "default" bloğuna denk gelmektedir.

Şimdi diyeceksiniz ki, "sadece kod biraz daha kısa gözüksün diye bu kullanımı mı çıkartmış Microsoft?". Tabi ki de bu kadar değil bu kullanımın getirdiği kolaylıklar. Şimdi diğer kolaylıklarına değinelim. Bunun için öncellikle bir tane Employee sınıfı oluşturuyorum.
Kod:
class Employee
{
    public int TitleId { get; set; }
    public string FullName { get; set; }
    public string Department { get; set; }
}

Null Object Kontrolü

Program akışında null object'ler ile sık sık karşılaşıyoruz. Program logic'indeki bir hatadan, db'deki hatalı bir kayıttan vs. null object'ler ile başa çıkmamız gerekebiliyor. Bunun için yazdığımız class üzerinden yeni bir switch bloğu oluşturalım.

Kod:
var juniorDeveloper = new Employee()
{
    TitleId = 1,
    FullName = "Ahmet Birinci"
};
 
string titleName = juniorDeveloper.TitleId switch
{
    1 => "Stajyer",
    2 => "Junior Developer",
    3 => "Mid Developer",
    4 => "Senior Developer",
    5 => "Team Lead",
    _ => "Hatalı Id"
};
Console.WriteLine(titleName);
Kodu çalıştırdığımızda "Stajyer" Çıktısını verecektir.
1709714885675.png

Ama burada bize null bir object gelmiş olsaydı, aşağıdaki gibi null object hatasıyla karşılacaktık.


1709714897687.png

Bu tarz null checkleri yapabilmek, object'e ait koşullar oluşturabilmek için, "Property Pattern" diye adlandırılan farklı bir özelliğe değineceğim. Bunun için yukarıda yeni yazdığımız switch bloğunu aşağıdaki gibi güncelleyelim.
Kod:
string titleName = juniorDeveloper switch
{
    { TitleId: 1 } => "Stajyer",        
    { TitleId: 2 } => "Junior Developer",
    { TitleId: 3 } => "Mid Developer",  
    { TitleId: 4 } => "Senior Developer",
    { TitleId: 5 } => "Team Lead",      
    _ => "Hatalı Id"                  
};
Console.WriteLine(titleName);
Bu sayede switch içerisine gönderdiğimiz object'in değerlerinin dolu olmasını da kontrol ediyor olacağız .


Koşullu Switch İfadeleri

Switch içerisine gönderdiğimiz object'e ait koşulları da yazabiliriz. Buna bir örnek vermek gerekirse;

Kod:
var employee = new Employee()
{
    TitleId = 1,
    FullName = "Ayşe İkinci",
    Department = "Sales"
};
 
string titleName = employee switch
{
    {Department: "IT", TitleId: 1 } => "Stajyer IT",
    {Department: "Sales", TitleId: 1 } => "Stajyer Pazarlamacı",        
    _ => "Hatalı Id"                  
};
Console.WriteLine(titleName);
Şirkette stajyer genel bir ünvandır ve farklı departmanda stajyer'ler olabilir. Bunun için sadece TitleId değerine bakmak yerine Department değerine de bakmak gerekebilir. Bunun için iki property'yi de switch içerisinde yukarıdaki gibi kontrol edebiliriz.

Class type Kontrolü

Bu yapı içerisinde objeclerimizin class tiplerine göre de filtrelemelerimizi yapabiliriz. Bunun için öncellikle daha önce eklediğimiz Employee sınıfından kalıtım alan yeni "Director" class'ı oluşturalım.

Kod:
class Director : Employee
{
}
Yazdığımız switch ifadesini de aşağıdaki gibi güncelleyebiliriz.
Kod:
string titleName = employee switch
{
    Employee { Department: "IT", TitleId: 1 } => "Stajyer IT",
    Employee { Department: "IT", TitleId: 2 } => "Junior Developer",
    Employee { Department: "IT", TitleId: 3 } => "Mid Developer",
    Director { Department: "IT" } => "CTO",
    _ => "Hatalı Id"
};
Bu sayede farklı class tiplerine göre koşullar da yazabiliriz.
1709714965349.png

Kaynak;



 
Paylaşım İçin Teşekkürler.
 
Paylaşım için teşekkürler.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst