2012-12-05 21 views
5

Anahtar deyimlerinin CodeDom numaralı sürümde bulunmadığını ve derleyicilerin anahtar deyimiyle nasıl çalıştığını biliyorum.CodeDom'da anahtar deyimi (atlama tablosu stili)

birçok durum mevcut olduğunda, ben Why the switch statement and not if-else?

mi If-else
kullanmak istemiyorsanız performans nedenleriyle Yani belirli bir vaka listesi için bir atlama tablo simüle etmek kod oluşturmak mümkündür.

switch(value) { 
    case 0: return Method0(); 
    case 1: return Method1(); 
    case 4; return Method4(); 
} 

üretmek misiniz:

private delegate object Method(); 

    Method[] _jumpTable = new Method[] { Method0, Method1, null, null, Method4 }; 

    private object GetValue(int value) 
    { 
     if (value < 0 || value > 4) 
      return null; 
     return _jumpTable[value](); 
    } 

orada dizisi deliklerdir veya liste seyrek ise bir dizi vaka listesini analiz etmek ve üretmek için en iyi yolu nedir?

cevap

2

Kod anaylsis için The Roslyn Project'a bir göz atmak isteyebilirsiniz. Tablo büyük ve özellikle seyrekse,/else daha iyi olabilirse (modern CPU önbellekleri verildiğinde). Roslyn, DOM'a gitmenize izin vermeli ve daha sonra sıralanabilecek (belki de tek bir linq stmt dosyasında) durum değerlerini edinmelidir. Yukarıdaki geçişinizde 'break' anlamına geldiğine inanıyorum. Böyle bir şey uygularsanız, performansın gerçekten iyileştirildiğinden emin olmak için çok dikkatli bir şekilde test ederim.