2016-01-22 8 views
9

में अपेक्षित आउटपुट का उत्पादन न करने योग्य नलटेबल लॉन्ग स्विच स्टेटमेंट वीएस2015 अपडेट 1 में एक नामुमकिन लंबे स्विच स्टेटमेंट का उपयोग करते समय मुझे कुछ अजीब व्यवहार दिखाई दे रहा है, जिसे मैं अन्य विजुअल स्टूडियो रिलीज़ में नहीं देख रहा हूं, जहां यह अपेक्षित है।वीएस2015

Input = -1, Switch 1 output = d, Switch 2 output = d, If Else = d 
Input = 0, Switch 1 output = 0, Switch 2 output = d, If Else = 0 
Input = 1, Switch 1 output = d, Switch 2 output = d, If Else = 1 
Input = 2, Switch 1 output = d, Switch 2 output = d, If Else = d 
Input = , Switch 1 output = d, Switch 2 output = d, If Else = d 

मैं केवल Nullable प्रकार के साथ इस व्यवहार को देख कर रहा हूँ:

class Program 
{ 
    static void Main(string[] args) 
    { 
     NullableTest(-1); 
     NullableTest(0); 
     NullableTest(1); 
     NullableTest(2); 
     NullableTest(null); 
    } 

    public static void NullableTest(long? input) 
    { 
     string switch1; 
     switch (input) 
     { 
      case 0: 
       switch1 = "0"; 
       break; 
      case 1: 
       switch1 = "1"; 
       break; 
      default: 
       switch1 = "d"; 
       break; 
     } 

     string switch2; 
     switch (input) 
     { 
      case -1: 
       switch2 = "-1"; 
       break; 
      case 0: 
       switch2 = "0"; 
       break; 
      case 1: 
       switch2 = "1"; 
       break; 
      default: 
       switch2 = "d"; 
       break; 
     } 

     string ifElse; 
     if (input == 0) 
     { 
      ifElse = "0"; 
     } 
     else if (input == 1) 
     { 
      ifElse = "1"; 
     } 
     else 
     { 
      ifElse = "d"; 
     } 
     Console.WriteLine("Input = {0}, Switch 1 output = {1}, Switch 2 output = {2}, If Else = {3}", input, switch1, switch2, ifElse); 
    } 

यह नमूना कोड निम्न निर्गम (पठनीयता के लिए संरेखित) पैदा करता है। गैर-शून्य प्रकारों की उम्मीद के अनुसार काम करते हैं।

ध्यान दें कि यह नहीं समान व्यवहार this question में है, और this संकलक बग कि VS2015 अद्यतन 1 में निर्धारित किया गया है मुझे लगता है कि उन लोगों के उदाहरणों में से दोनों को सही ढंग से चलाने की पुष्टि कर लें की वजह से नहीं है।

उत्तर

2

ऐसा लगता है कि यह this bug के कारण होता है, और this pull request के साथ तय किया गया था।

मैंने हाल ही में रोज़लिन का निर्माण करने की कोशिश की है और प्रश्न में नमूना कोड अब अपेक्षित काम करता है।

Here एमएसबिल्ड टूल्स 2015 का अद्यतन संस्करण है जिसने इस मुद्दे को सही किया है।

1

यह एक बग है। मेरा मानना ​​है कि यह उसी bug के बाएं ओवर होना चाहिए। किसी भी अप्रत्याशित व्यवहार से बचने के लिए आप If के साथ अपने कोड को बेहतर ढंग से प्रतिस्थापित करते हैं।

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