2017-06-22 26 views
6

साथ # 7 पैटर्न मैच के लिए यह संभव तो जैसे # 7 ग का उपयोग कर स्विच बयान में पैटर्न मिलान के साथ tuples उपयोग करने के लिए है:सी एक टपल

switch (parameter) 
{ 
    case ((object, object)) tObj when tObj.Item1 == "ABC": 
     break; 
} 

मैं एक त्रुटि है कि tObj does not exist in the current context कहते हैं मिलता है।

मैं इस की कोशिश की है और साथ ही:

switch (parameter) 
{ 
    case (object, object) tObj when tObj.Item1 == "ABC": 
     break; 
} 

यह ठीक काम करता है:

switch (parameter) 
{ 
    case MachineModel model when model.Id == "123": 
     break; 
} 

उत्तर

8

याद रखें कि सी # 7 tuples, बस वाक्यात्मक चीनी हैं, इसलिए (object, object) वास्तव में सिर्फ System.ValueTuple<object, object> है।

मुझे लगता है कि देव टीम नहीं tuples के लिए नए वाक्य रचना के लिए खाते में यह विशेष स्थिति लिया है, लेकिन आप यह कर सकते हैं:

switch (parameter) 
{ 
    case System.ValueTuple<object, object> tObj when tObj.Item1 == "x": 
     break; 
} 

इसके अतिरिक्त, क्योंकि "var पैटर्न" कुछ भी मिलान कर देंगे और इस प्रकार का सम्मान करें, उपरोक्त को सरल बनाया जा सकता है:

switch (parameter) 
{ 
    case var tObj when tObj.Item1 == "x": 
     break; 
} 
+2

@DavidArno संपादन के लिए धन्यवाद, लेकिन 'var' का उपयोग करने में एक समस्या है। यदि 'पैरामीटर' प्रकार 'ऑब्जेक्ट' प्रकार है और स्विच स्टेटमेंट का उपयोग प्रकार की जांच के लिए भी किया जा रहा है, तो यह असफल हो जाएगा। [उदाहरण के लिए] (https://gist.github.com/WiredUK/21d1a61c01580a2fe7b055ec83b46889) – DavidG

+0

अच्छा बिंदु। मैंने इस सवाल से माना था कि 'पैरामीटर' एक टुपल था, लेकिन यह एक बुरा धारणा हो सकती है। –

+2

@ डेविड अर्नो मुझे लगता है कि यह लगभग निश्चित रूप से है, इसलिए मैंने आपके संपादन को tweaked नहीं किया है। बस सोचा कि यह उल्लेख करने लायक था। – DavidG

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