सी # में, switch
कथन में मामलों की सीमाओं को विस्तारित करने की अनुमति नहीं देता है। मुझे इस उद्देश्य के लिए अगर अन्यथा लूप का उपयोग करने का विचार पसंद नहीं है, तो क्या सी # में संख्यात्मक श्रेणियों की जांच करने के अन्य तरीके हैं?स्विच केस, सी # 3.5
उत्तर
आप एक HashTable
क्रमशः Dictionary
का उपयोग Condition => Action
की मैपिंग बनाने के लिए कर सकते हैं।
उदाहरण:
class Programm
{
static void Main()
{
var myNum = 12;
var cases = new Dictionary<Func<int, bool>, Action>
{
{ x => x < 3 , () => Console.WriteLine("Smaller than 3") } ,
{ x => x < 30 , () => Console.WriteLine("Smaller than 30") } ,
{ x => x < 300 , () => Console.WriteLine("Smaller than 300") }
};
cases.First(kvp => kvp.Key(myNum)).Value();
}
}
इस तकनीक switch
के लिए एक सामान्य विकल्प है, खासकर यदि क्रिया (एक विधि कॉल की तरह) केवल एक लाइन के होते हैं।
और तुम प्रकार उपनाम के एक प्रशंसक रहे हैं: अगर-किसी और बात से काम करता है
using Int32Condition = System.Collections.Generic.Dictionary<System.Func<System.Int32, System.Boolean>, System.Action>;
...
var cases = new Int32Condition()
{
{ x => x < 3 , () => Console.WriteLine("Smaller than 3") } ,
{ x => x < 30 , () => Console.WriteLine("Smaller than 30") } ,
{ x => x < 300 , () => Console.WriteLine("Smaller than 300") }
};
+1 एक अच्छा विचार – Alex
के लिए +1 लेकिन आपको एक शब्दकोश नहीं लेना चाहिए (KeyValuePair, Tuple या sth self परिभाषित की एक सूची लें) अन्यथा आप भविष्यवाणी नहीं कर सकते कि फ़ंक्शन को परीक्षण के लिए किस क्रम में बुलाया जाता है। – Oliver
दिलचस्प है लेकिन अगर मैंने वास्तविक प्रोजेक्ट में/else के बदले इस पैटर्न को देखा है तो मैं इसे http://thedailywtf.com पर सबमिट कर रहा हूं :) – Stilgar
नहीं। बेशक, यदि श्रेणियां छोटी हैं तो आप
case 4:
case 5:
case 6:
// blah
break;
दृष्टिकोण का उपयोग कर सकते हैं, लेकिन इसके अलावा: नहीं। if
/else
का उपयोग करें।
नहीं। कम से कम कुछ भी नहीं जो अधिक सुंदर है।
इसके अलावा कोई # 3.5 सी केवल .NET 3.5 और सी # 3.0
अगर पर्वतमाला के अंतराल स्थिर है, तुम कोशिश
int num = 11;
int range = (num - 1)/10; //here interval is 10
switch (range)
{
case 0:
Console.Write("1-10");
break; // 1-10
case 1:
Console.Write("11-20");
break; // 11-20
// etc...
}
आउटपुट होगा कर सकते हैं: अगर अंतराल है "11-20"
चर तो का उपयोग if/else
इस
private void ExecuteInRange(Dictionary<Range,Action<int>> ranges)
{
foreach (var range in ranges)
{
if (range.Key.Value < range.Key.Max && range.Key.Value > range.Key.Max)
range.Value(range.Key.Value);
}
}
public class Range
{
public int Min { get; set; }
public int Max { get; set; }
public int Value { get; set; }
}
की तरह कुछ प्रयास करें नेस्टेड-आशुलिपि एक प्रकार का है, और साफ है।
myModel.Value = modelResult >= 20 ? 5 : modelResult >= 14 ? 4 : modelResult >= 5 ? 3 : modelResult >= 2 ? 2 : modelResult == 1 ? 1 : 0;
डाउनग्रेड के लिए कोई कारण? मैंने कोड की 20 पंक्तियों को 1 – blomster
में बदल दिया है जो भयानक है। – ediblecode
int b;
b = Int32.Parse(textBox1.Text);
int ans = (100-b)/3; //the 3 represents the interval
//100 represents the last number
switch(ans)
{
case 0:
MessageBox.Show("98 to 100");
break;
case 1:
MessageBox.Show("95 to 97");
break;
case 2:
MessageBox.Show("92 to 94");
break;
case 3:
MessageBox.Show("89 to 91");
break;
case 4:
MessageBox.Show("86 to 88");
break;
default:
MessageBox.Show("out of range");
break;
- 1. सी # स्विच-केस स्ट्रिंग
- 2. स्विच केस
- 3. स्विच-केस
- 4. स्विच केस इंडेंटेशन
- 5. केस/स्विच स्टेटमेंट
- 6. सी स्विच-केस घुंघराले ब्रेसिज़ हर मामले
- 7. स्विच, एकाधिक केस
- 8. जेएस स्विच केस
- 9. "स्विच() केस" से "तेज" है?
- 10. स्विच केस में एनम रेफरेंसिंग
- 11. स्विच केस असेंबली स्तर कोड
- 12. एसक्यूएल स्विच/केस जहां क्लॉज
- 13. जंप टेबल स्विच केस प्रश्न
- 14. IntelliJ: स्विच केस उत्पन्न करें
- 15. यदि ब्लॉक बनाम स्विच-केस ब्लॉक
- 16. सी # स्विच/ब्रेक
- 17. एकाधिक तर्कों के साथ उद्देश्य-सी स्विच केस
- 18. जावा एनम्स और स्विच स्टेटमेंट्स - डिफ़ॉल्ट केस?
- 19. एंगुलरजेएस, एक स्विच-केस का दायरा गुंजाइश?
- 20. एंड्रॉइड: इस से स्विच केस कैसे बनाएं?
- 21. जावास्क्रिप्ट स्विच/केस: तुलना की तरह हैं?
- 22. स्विच केस में वेरिएबल का दायरा
- 23. बेहतर: स्विच-केस या अगर-और?
- 24. एक स्विच केस या std :: मैप
- 25. का उपयोग || रेल में केस स्विच
- 26. सी # .net सीएफ 3.5
- 27. सी # और .NET 3.5
- 28. स्विच
- 29. स्विच-स्टेटमेंट में पहले 'केस' से पहले कोड
- 30. स्विच केस में अतिरिक्त ब्रेसिज़ का उद्देश्य क्या है?
कितना बड़ा पर्वतमाला है? – leppie
आप इसे वास्तव में सी # में नहीं कर सकते हैं (जब तक कि यह संख्याओं की एक छोटी सी सीमा न हो जो आप ब्लॉक में सूचीबद्ध कर सकते हैं), लेकिन, एक बार के लिए, आप ** ** VB.Net में कर सकते हैं - http://stackoverflow.com/questions/100 9 0 9 2/चयन-केस-टू-चेक-रेंज-ऑफ-ए-दशमलव-संख्या पर्याप्त रूप से पर्याप्त – dash
अच्छी तरह से आपके पास एक विधि लौटने वाली विधि हो सकती है जो सीमा में होती है और फिर यदि लूप, इसका सरल, पठनीय और काम अच्छी तरह से करता है – V4Vendetta