2010-07-07 20 views
29

को बदलने के लिए उपयुक्त वापसी है क्या यह सी # स्विच स्टेटमेंट को संभालने का एक उचित तरीका है या अभी भी एक स्पष्ट ब्रेक आवश्यक है? referenceसी # स्विच स्टेटमेंट ब्रेक

public static string ToRegistryString(AliceKey.AliceKeyPaths aliceKeyPath) 
    { 
    switch (aliceKeyPath) 
     { 
      case AliceKey.AliceKeyPaths.NET_CLR_DATA: 
       return @"\.NET CLR Data\"; 
      case AliceKey.AliceKeyPaths.NET_CLR_NETWORKING: 
       return @"\.NET CLR Networking\"; 
      case AliceKey.AliceKeyPaths.NET_DATA_PROVIDER_MSSQL: 
       return @"\.NET Data Provider for SqlServer\"; 
      case AliceKey.AliceKeyPaths.NET_DATA_PROVIDER_ORACLE: 
       return @"\.NET Data Provider for Oracle\"; 
     } 
     return new string(new char[0]); 
    } 
+0

"नया स्ट्रिंग लौटाने (नए चार [0]);" स्विच स्टेटमेंट के बाहर आप "डिफ़ॉल्ट: नई स्ट्रिंग (नया char [0]) वापस भी उपयोग कर सकते हैं;" अन्य सभी मामलों के बाद मामला। स्विच स्टेटमेंट का उपयोग करने के लिए यह एक क्लीनर तरीका होगा। – FrozZerrer

उत्तर

40

यह ठीक है। मुद्दा यह है कि एक केस ब्लॉक का अंत पहुंच योग्य नहीं होना चाहिए - जो यह यहां है, क्योंकि आप वापस आ गए हैं।

हालांकि आप के बजाय new string(new char[0]) क्यों लौट रहे हैं? यदि आप यह सुनिश्चित करने की कोशिश कर रहे हैं कि यह हर बार एक अलग स्ट्रिंग है, तो आप वास्तव में बहुत ही अजीब कोने मामले में भाग लेंगे - new string(...) पर कॉल करने के बावजूद कि कोड हमेशा वास्तव में एक ही संदर्भ लौटाएगा ...

अंत में: मैं चाहता था वास्तव में सिर्फ एक Dictionary<AliceKey.AliceKeyPaths, string> में इस स्विच/मामला ब्लॉक बदलने का सुझाव:

private static readonly Dictionary<AliceKey.AliceKeyPaths, string> RegistryMap = 
    new Dictionary<AliceKey.AliceKeyPaths, string> 
{ 
    { AliceKey.AliceKeyPaths.NET_CLR_DATA, @"\.NET CLR Data\" }, 
    { AliceKey.AliceKeyPaths.NET_CLR_NETWORKING, @"\.NET CLR Networking\" }, 
    // etc 
}; 

public static string ToRegistryString(AliceKey.AliceKeyPaths aliceKeyPath) 
{ 
    string value; 
    return RegistryMap.TryGetValue(aliceKeyPath, out value) ? value : ""; 
} 
+0

मुझे पता था कि उससे कहीं ज्यादा सरल था, धन्यवाद – Woot4Moo

5

तुम सिर्फ एक है कि नियंत्रण के प्रवाह में परिवर्तन, तो एक goto या एक return काम करना चाहिए विशेष रूप से एक break बयान का उपयोग करने की जरूरत नहीं है।

अधिक जानकारी के लिए MSDN देखें: http://msdn.microsoft.com/en-us/library/06tc147t(VS.71).aspx

इसके बजाय डालने की
संबंधित मुद्दे