2012-12-05 26 views
5

मुझे पता है कि स्विच स्टेटमेंट CodeDom में उपलब्ध नहीं हैं और कैसे कंपाइलर्स स्विच स्टेटमेंट से निपटते हैं।कोडडॉम (कूद तालिका शैली) में स्विच स्टेटमेंट

तो प्रदर्शन के कारणों के लिए जब कई मामलों मौजूद हैं, मैं नहीं चाहता कि उपयोग करने के लिए अगर-बाकी
Why the switch statement and not if-else?

है चाहता हूँ किसी दिए गए मामले सूची के लिए एक कूद तालिका अनुकरण करने के लिए कोड उत्पन्न करने के लिए संभव है।

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

चाहेंगे उत्पादन:

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](); 
    } 

सबसे अच्छा तरीका मामले सूची का विश्लेषण और एक सरणी उत्पन्न करने के लिए अगर वहाँ अनुक्रम में छेद कर रहे हैं या सूची विरल है क्या है?

उत्तर

2

आप कोड anaylsis के लिए The Roslyn Project पर एक नज़र डालना चाहते हैं। यदि तालिका बड़ी है और विशेष रूप से स्पैस है तो/और बेहतर हो सकता है (आधुनिक सीपीयू कैश दिए गए)। Roslyn आपको डोम चलने और केस मूल्यों को प्राप्त करने देना चाहिए जिसे बाद में हल किया जा सकता है (शायद एक सिंगल linq stmt में)। मेरा मानना ​​है कि आप ऊपर अपने स्विच में 'ब्रेक' होना चाहते हैं। यदि आप इस तरह कुछ लागू करते हैं तो मैं यह सुनिश्चित करने के लिए बहुत सावधानीपूर्वक परीक्षण करता हूं कि यह वास्तव में प्रदर्शन में सुधार करता है।

संबंधित मुद्दे