futureproof मैं Enum मूल्यों पर आधारित एक सरल स्विच बयान के साथ कुछ कोड लिख रहा हूँ। यह मेरे लिए हुआ कि भविष्य में किसी बिंदु पर एक डेवलपर एक नया मान जोड़ सकता है, इसलिए मैंने रनटाइम पर इसे कैप्चर करने और अपवाद फेंकने के लिए एक डिफ़ॉल्ट विधि शामिल की। हालांकि मुझे एहसास हुआ कि जब भी मैं इस तरह तर्क में डालता हूं, मुझे यह करना चाहिए, और मुझे लगता है कि संकलन समय के बजाए रन टाइम पर ऐसे मुद्दे ही देखेंगे। बस enum खुद के लिए टिप्पणियों को जोड़ने से परे -
मैं वहाँ कुछ कोड मैं डेवलपर है कि वे मामले कि वे enum मान अपडेट में कुछ तरीकों अद्यतन करने की आवश्यकता बताने के लिए संकलक पाने के लिए जोड़ सकते हैं यदि wonderring रहा हूँ?सी # मान्य Enum मान यह सुनिश्चित - विधि
उदा (नीचे का उदाहरण पूरी तरह से सैद्धांतिक है; मैंने विकास जीवन चक्र से स्थितियों को चुना है ताकि यह सुनिश्चित किया जा सके कि यह सबसे ज्यादा परिचित है)।
public enum DevelopmentStatusEnum
{
Development
//, QA //this may be added at some point in the future (or any other status could be)
, SIT
, UAT
, Production
}
public class Example
{
public void ExampleMethod(DevelopmentStatusEnum status)
{
switch (status)
{
case DevelopmentStatusEnum.Development: DoSomething(); break;
case DevelopmentStatusEnum.SIT: DoSomething(); break;
case DevelopmentStatusEnum.UAT: DoSomething(); break;
case DevelopmentStatusEnum.Production: DoSomething(); break;
default: throw new StupidProgrammerException(); //I'd like the compiler to ensure that this line never runs, even if a programmer edits the values available to the enum, alerting the program to add a new case statement for the new enum value
}
}
public void DoSomething() { }
}
public class StupidProgrammerException: InvalidOperationException { }
यह थोड़ा अकादमिक है, लेकिन मैं इसे अपने ऐप को मजबूत बनाने में उपयोगी होने के रूप में देख सकता हूं। क्या किसी ने इस पर किसी भी अच्छे विचार से पहले यह कोशिश की है कि यह कैसे हासिल किया जा सकता है?
अग्रिम धन्यवाद,
जेबी
मैं वही करता हूं जो आप करते हैं। –
हर बार जब आप स्वयं को एक स्विच स्टेटमेंट लिखते हैं तो आपको इसके बजाय पॉलीमोर्फिज्म का उपयोग करने में कोड को दोबारा करने पर विचार करना चाहिए। [इस अंश को देखें] (मार्टिन फाउलर की पुस्तक [रिफैक्टरिंग] (http://martinfowler.com/books/refactoring.html) के http://sourcemaking.com/refactoring/replace-conditional-with-polymorphism)। इससे आपका कोड ओपन-क्लोज़ड प्रिंसिपल (ओसीपी) का पालन करेगा और अगले डेवलपर को स्विच स्टेटमेंट बदलने के लिए गायब होने से बचने में मदद मिलेगी। :-) –