Genel olarak (tüm diller ve tüm derleyiciler göz önünde bulundurularak) bir anahtar ifadesi, bir / / ifadesinden daha verimli olabilir, çünkü bir derleyicinin anahtar ifadelerinden atlama tabloları oluşturması kolaydır. Aynı şeyleri uygun kısıtlamalar verildiğinde if / else ifadeleri için yapmak mümkündür, ancak bu çok daha zordur.
C # söz konusu olduğunda, bu da geçerlidir, ancak başka nedenlerle.
Çok sayıda dizeyle, switch deyimini kullanmanın önemli bir performans avantajı vardır, çünkü derleyici atlama işlemini uygulamak için bir karma tablo kullanacaktır.
Az sayıda dizeyle, ikisi arasındaki performans aynıdır.
Bunun nedeni, bu durumda C # derleyicisinin bir atlama tablosu oluşturmamasıdır. Bunun yerine, IF / ELSE bloklarına eşdeğer MSIL üretir.
Bir "switch deyimi" MSIL talimatı, açıldığında bir switch deyimi uygulamak için bir atlama tablosu kullanacaktır. Ancak yalnızca tamsayı türleriyle çalışır (bu soru dizeleri sorar).
Az sayıda dize için, derleyicinin IF / ELSE blokları üretmesi daha verimli olur, daha sonra bir karma tablosu kullanmaktır.
Başlangıçta bunu fark ettiğimde, IF / ELSE bloklarının az sayıda dizeyle kullanıldığı için, derleyicinin çok sayıda dizge için aynı dönüşümü yaptığını varsaydım.
Bu YANLIŞ idi. 'IMA' bunu bana işaret edecek kadar nazikti (iyi ... bu konuda nazik değildi, ama haklıydı ve yanılmışım, önemli olan bu)
Ayrıca MSIL'de bir "anahtar" talimatının olmaması konusunda kemik kafalı bir varsayım yaptım (bir anahtar ilkel varsa, neden bir karma tablo ile kullanmıyorlardı, bu yüzden bir anahtar ilkel olmamalı. ...). Bu hem yanlış hem de inanılmaz derecede aptalcaydı. Yine 'IMA' bunu bana gösterdi.
Güncellemeleri burada yaptım çünkü en yüksek puan alan yazı ve kabul edilen cevap.
Ancak, Topluluk Wiki'sini yaptım çünkü REP'yi yanlış olduğu için hak etmediğimi düşünüyorum. Eğer bir şansınız varsa, lütfen 'ima' yazısını oylayın.