2013-02-19 6 views
41

सी # स्विच स्टेटमेंट का डिफॉल्ट लेबल कैसे एक नामुमकिन enum संभाल सकता है?सी # स्विच स्टेटमेंट का डिफॉल्ट लेबल कैसे एक नामुमकिन enum संभाल सकता है?

क्या डिफॉल्ट लेबल नल और किसी भी अनचाहे मामलों को पकड़ लेगा?

+2

इसे यहाँ का प्रयास करें: http://ideone.com/ – CloudyMarble

+3

सी # भाषा विशिष्टता, 8.7.2 "स्विच स्टेटमेंट"। http://msdn.microsoft.com/en-us/library/ms228593.aspx – Dennis

उत्तर

58

यदि यह शून्य है, तो यह डिफ़ॉल्ट लेबल हिट करेगा।

public enum YesNo 
{ 
    Yes, 
    No, 
} 

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     YesNo? value = null; 
     switch (value) 
     { 
      case YesNo.Yes: 
       Console.WriteLine("Yes"); 
       break; 
      case YesNo.No: 
       Console.WriteLine("No"); 
       break; 
      default: 
       Console.WriteLine("default"); 
       break; 
     } 
    } 
} 

कार्यक्रम default प्रिंट करेगा।

जब तक शून्य को संभाला नहीं जाता है।

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     YesNo? value = null; 
     switch (value) 
     { 
      case YesNo.Yes: 
       Console.WriteLine("Yes"); 
       break; 
      case YesNo.No: 
       Console.WriteLine("No"); 
       break; 
      case null: 
       Console.WriteLine("NULL"); 
       break; 
      default: 
       Console.WriteLine("default"); 
       break; 
     } 
    } 
} 

प्रिंट NULL

आप एक बिना क्रिया enum मान जो बाद में जोड़ा गया है है:

public enum YesNo 
{ 
    Yes, 
    No, 
    FileNotFound, 
} 

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     YesNo? value = YesNo.FileNotFound; 
     switch (value) 
     { 
      case YesNo.Yes: 
       Console.WriteLine("Yes"); 
       break; 
      case YesNo.No: 
       Console.WriteLine("No"); 
       break; 
      default: 
       Console.WriteLine("default"); 
       break; 
     } 
    } 
} 

यह अभी भी प्रिंट default

+0

यह कारण है कि मुझे जावा से अधिक # सी पसंद है। –

0

आप default की तुलना में एक विशेष मामले के लेबल दूसरे के मार्ग null स्विच मूल्यों के लिए अशक्त-कोलेसिंग ऑपरेटर ?? उपयोग कर सकते हैं:

public static IEnumerable<String> AsStrings(this IEnumerable<Char[]> src) 
{ 
    Char[] rgch; 

    var e = src.GetEnumerator(); 
    while (e.MoveNext()) 
    { 
     switch ((rgch = e.Current)?.Length ?? -1) 
     { 
      case -1: // <-- value when e.Current is 'null' 
       yield return null; 
       break; 
      case 0: 
       yield return String.Empty; 
       break; 
      case 1: 
       yield return String.Intern(new String(rgch[0], 1)); 
       break; 
      default: // 2...n 
       yield return new String(rgch); 
       break; 
     } 
    } 
} 
संबंधित मुद्दे