2017-10-05 14 views
13

क्या कोई मुझे प्रबुद्ध करने में मदद कर सकता है?अमान्य स्विच वाक्यविन्यास सफलतापूर्वक बनाता है?

मैं टीएफएस में कुछ बदलावों की जांच करने गया और मेरा चेक-इन अस्वीकार कर दिया गया। इसने मुझे संपादित किए गए स्विच स्टेटमेंट को देखने के लिए प्रेरित किया।

मुझे जो मिला है वह है कि विजुअल स्टूडियो 2017 का दावा है कि कोई संकलन समय मुद्दा नहीं है और मुझे एप्लिकेशन को सफलतापूर्वक बनाने और तैनात करने की अनुमति देता है। उस के शीर्ष पर, विधि के लिए इकाई परीक्षण भी इरादे के रूप में गुजर रहा प्रतीत होता है।

public enum PaymentStatus 
{ 
    Issued, 
    Cleared, 
    Voided, 
    Paid, 
    Requested, 
    Stopped, 
    Unknown 
} 

public class PaymentViewModel 
{ 
    public PaymentStatus Status { get; set; } 

    ... 

    public String StatusString 
    { 
     get 
     { 
      switch (this.Status) 
      { 
       case PaymentStatus.Cleared: 
        return "Cleared"; 
       case PaymentStatus.Issued: 
        return "Issued"; 
       case PaymentStatus.Voided: 
        return "Voided"; 
       case PaymentStatus.Paid: 
        return "Paid"; 
       case PaymentStatus.Requested: 
        return "Requested"; 
       case PaymentStatus.Stopped: 
        return "Stopped"; 
       case PaymentStatus Unknown: 
        return "Unknown"; 
       default: 
        throw new InavlidEnumerationException(this.Status); 
      } 
     } 
    } 
} 

तो, कृपया ध्यान दें कि "केस पेमेंटस्टैटस अज्ञात" रेखा '' गायब है। डॉट ऑपरेटर। जैसा कि बताया गया है, परियोजना बनाता है और चलता है; लेकिन गेटेड बिल्ड सर्वर के साथ चेक-इन करने में विफल रहा।

इसके अलावा, ध्यान दें कि निम्नलिखित परीक्षण गुजर रहा है:

[TestMethod] 
public void StatusStringTest_Unknown() 
{ 
    var model = new PaymentViewModel() 
    { 
     Status = PaymentStatus.Unknown 
    } 

    Assert.AreEqual("Unknown", model.StatusString); 
} 

यहाँ कुछ नहीं squigglies दिखा छवियों हैं और यह वास्तव में ठीक निर्माण करता है: गुजर परीक्षा पद्धति Switch-No-Compiler-Error

और: Switch-Passing-Test

अंत में, ध्यान दें कि मैंने संसाधन फ़ाइल का उपयोग करने के बजाय केवल एक स्थिर स्ट्रिंग के साथ परीक्षण चलाया और यह गुजरता है। मैंने उपर्युक्त कोड में सादगी के लिए संसाधन फ़ाइल सामग्री को छोड़ दिया है।

इस पर किसी भी विचार की सबसे सराहना की जाती है! अग्रिम में धन्यवाद!

उत्तर

11

यह संकलित क्योंकि आपके दृश्य स्टूडियो एक पैटर्न मिलान, एक new feature 7 की सी # है जो के रूप में PaymentStatus Unknown व्याख्या:

  • PaymentStatus प्रकार है,
  • Unknown नाम है,
  • कोई शर्त (यानी पैटर्न हमेशा मेल खाता है)।

    switch (this.Status) { 
        case PaymentStatus ended when ended==PaymentStatus.Stopped || ended==PaymentStatus.Voided: 
         return "No payment for you!"; 
        default: 
         return "You got lucky this time!"; 
    } 
    

    TFS सी # के एक पुराने संस्करण का उपयोग करने के लिए स्थापित किया गया है, यह इस स्रोत को अस्वीकार करने के लिए जा रहा है:

इस वाक्य रचना के लिए लक्षित उपयोग के मामले कुछ इस तरह था।

नोट: आपका यूनिट परीक्षण कार्य करने का कारण यह है कि शेष मामले सही तरीके से किए गए हैं। InavlidEnumerationException(this.Status) फेंकने के लिए एक परीक्षण केस असफल होगा, हालांकि, स्विच किसी अज्ञात मान को अच्छी तरह से समझता है, ठीक है, PaymentStatus.Unknown

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