मैं जिस कोडबेस पर काम कर रहा हूं उसमें एक स्विच स्टेटमेंट में आया हूं और मैं switch statements are considered a code smell के बाद इसे बेहतर तरीके से बदलने के तरीके को समझने की कोशिश कर रहा हूं। हालांकि, several स्टैक ओवरफ्लो पर replacingswitchstatements पर पोस्ट करके मुझे इस विशेष स्विच स्टेटमेंट को प्रतिस्थापित करने का एक प्रभावी तरीका नहीं लगता है।किसी को स्विच स्टेटमेंट को खत्म करने का प्रयास कब करना चाहिए?
इससे मुझे आश्चर्य हुआ कि यह विशेष स्विच स्टेटमेंट ठीक है और यदि कोई विशेष परिस्थितियां हैं जहां स्विच स्टेटमेंट उचित मानते हैं।
मेरे मामले कोड (थोड़ा स्वाभाविक रूप से अस्पष्ट) है कि मैं के साथ संघर्ष कर रहा हूँ में इस तरह है:
private MyType DoSomething(IDataRecord reader)
{
var p = new MyType
{
Id = (int)reader[idIndex],
Name = (string)reader[nameIndex]
}
switch ((string) reader[discountTypeIndex])
{
case "A":
p.DiscountType = DiscountType.Discountable;
break;
case "B":
p.DiscountType = DiscountType.Loss;
break;
case "O":
p.DiscountType = DiscountType.Other;
break;
}
return p;
}
किसी को भी इस स्विच को खत्म करने के लिए एक तरह से बता सकते हैं? या यह एक स्विच का उचित उपयोग है? और यदि ऐसा है, तो स्विच स्टेटमेंट के लिए अन्य उचित उपयोग हैं? मैं वास्तव में जानना चाहता हूं कि वे कहां उपयुक्त हैं इसलिए मैं हर स्विच स्टेटमेंट को खत्म करने की कोशिश करने में बहुत अधिक समय बर्बाद नहीं करता क्योंकि मुझे कुछ परिस्थितियों में गंध माना जाता है।
अद्यतन:Michael के सुझाव पर मैं इस तर्क के दोहराव के लिए खोज का एक सा था और पता चला कि किसी अन्य वर्ग है कि प्रभावी ढंग से पूरे स्विच बयान बेमानी बना में तर्क बनाया था। तो कोड के इस विशेष बिट के संदर्भ में स्विच स्टेटमेंट अनावश्यक था। हालांकि, मेरा प्रश्न कोड में स्विच स्टेटमेंट की उचितता के बारे में अधिक है और क्या हमें हमेशा इस मामले में उन्हें ढूंढने की कोशिश करनी चाहिए, इस मामले में मैं इस जवाब को स्वीकार करने के इच्छुक हूं कि यह स्विच स्टेटमेंट उचित है।
क्या आप प्रोग्रामिंग भाषा को शामिल करने के लिए एक टैग जोड़ सकते हैं जिसमें यह लिखा गया है? यह स्पष्ट है कि कोड क्या कर रहा है, लेकिन मुझे लगता है कि यह अंतर करने में मददगार है। यह स्पष्ट रूप से जावा नहीं है क्योंकि जावा में कोई "स्ट्रिंग" कक्षा नहीं है। –
@ एमीर मैंने कोड में कोड को सी # के रूप में पहचाना है। कारण मैंने पहली जगह में नहीं किया क्योंकि मैं विशेष रूप से सी # के लिए सवाल पूछना नहीं चाहता था क्योंकि मेरा प्रश्न स्विच स्टेटमेंट का उपयोग करने की सामान्य उपयुक्तता के बारे में अधिक है ... – mezoid
मैं अनुमान लगा सकता हूं कि सी # – bbqchickenrobot