2016-11-27 7 views
15

काम नहीं करता है मैं विजुअल स्टूडियो 2017 आरसी का उपयोग कर रहा हूं और मैंने System.ValueTuple पैकेज स्थापित किया है जो नए सी # 7.0 टुपल उपयोग को सक्षम बनाता है, लेकिन मैं कर सकता हूं 'टी यह इस विशिष्ट मामले में काम करते हैं:"अगर (वस्तु है (स्ट्रिंग, रंग))" सी # 7.0 टुपल उपयोग

आप देख सकते हैं, पहली विधि किसी भी लाल squigglies नहीं है और यह सिर्फ काम करता है। लेकिन o is (string, Color) करने का प्रयास कर असंबंधित त्रुटियों के साथ विफल रहता है:

नई tuples इस तरह से इस्तेमाल नहीं किया जा सकता है? या यह सिर्फ पैकेज की वर्तमान स्थिति है? मैंने इसे नवीनतम संस्करण बीटीडब्ल्यू में अपडेट किया है, जो इस समय 4.3.0 है। मैंने this MSDN post पढ़ा है लेकिन ऐसा कोई उपयोग नहीं मिला है।

+2

न्यूजेट पैकेज केवल आवश्यक प्रकार की आपूर्ति करता है, यह संकलक का हिस्सा नहीं देता है जो इसे संभालता है, जबकि Nuget पैकेज tuples का उपयोग करने के लिए आवश्यक है, इसमें कोई असर नहीं है आपको प्राप्त होने वाले त्रुटि संदेश पर। –

+11

भविष्य के संदर्भ के लिए यह बेहतर होगा यदि आप कोड और त्रुटि संदेशों को टेक्स्ट के रूप में पोस्ट करते हैं, और स्क्रीनशॉट के रूप में नहीं, यह मेरे जैसे दूसरों के लिए आसान बनाता है, कोड के साथ प्रयोग करने और परिणामों का विश्लेषण करने के लिए। –

+0

उत्सुकता से बाहर: क्या ओ टुपल <स्ट्रिंग, रंग> "काम करता है? – Dyrborg

उत्तर

10

Roslyn contains tests that ensure using tuples in pattern matching does cause errors (this PR में जोड़ा गया, जो कुछ भी समझा नहींता है), इसलिए ऐसा लगता है कि यह वर्तमान में अपेक्षित व्यवहार है। मुझे यकीन नहीं है कि इसके लिए क्या कारण है, या यदि सी # 7.0 का अंतिम संस्करण इस तरह व्यवहार करने की योजना है। यह निश्चित रूप से ऐसा कुछ है जिसे मैं काम करने की उम्मीद करता हूं।

7

कुछ पैटर्न मिलान सुविधाओं को सी # 7 रिलीज से हटा दिया गया था। इसमें टुपल्स के लिए पैटर्न मिलान शामिल है। इसे बाहर खींच लिया जाता है और भविष्य की शाखाओं में डाल दिया जाता है। (https://github.com/dotnet/roslyn/issues/10866)

इसका मतलब है कि पैटर्न मिलान और अधिक उन्नत प्रकार के reddit पोस्टर wreckedadvent द्वारा प्रभावी रूप से बताया गया है, सहित, सी # 7 में उपलब्ध नहीं होगा: इस तरह के स्थितीय पैटर्न के रूप में

  • पुनरावर्ती पैटर्न रूपों (उदाहरण के लिए, पी व्यक्ति ("मिकी", *), संपत्ति पैटर्न (जैसे, पी व्यक्ति है {FirstName है "मिकी"}), टपल पैटर्न, वाइल्डकार्ड *, आदि है

स्रोत: https://www.infoq.com/news/2016/05/csharp7-pattern-matching-removed

अद्यतन: प्रकार परीक्षण (int, int) को टुपल पैटर्न के रूप में व्याख्या किया जा सकता है। उदाहरण के लिए यदि आप एक प्रकार का परीक्षण करना चाहते हैं और एक चर को परिणाम बांधना चाहते हैं। तो प्रकार परीक्षण परीक्षण ट्यूपल पैटर्न में शामिल है। उदाहरण के लिए (int x, int y) एक प्रकार का परीक्षण या एक ट्यूपल पैटर्न हो सकता है। Github पर पैटर्न-मिलान चर्चा देखें: https://github.com/dotnet/roslyn/issues/11744

+1

मुझे समझ में नहीं आ रहा है कि पैटर्न मिलान हटाने के कारण 'ओ टाइप' के कुछ मामलों को भी हटा दिया गया है, जहां इस मामले में 'टाइप' एक टुपल है।ऐसा लगता है कि संकलक इस तथ्य पर चमकने के लिए वास्तव में कठिन प्रयास करता है कि '(टी 1, टी 2)' वास्तव में केवल 'वैल्यू टाइप ' है और कुछ मामलों में नकली सदस्य नामों के कुछ गुण हैं, और फिर 'is' ऑपरेटर के मामले में समर्थन अभी बाहर निकाला गया है। फिर फिर, मैंने सी # 7 दस्तावेज या कार्यान्वयन में बहुत कुछ नहीं पढ़ा है, लेकिन यह मेरे लिए अजीब लगता है कि यह विशेष हिस्सा अधिक उन्नत पैटर्न मिलान से जुड़ा हुआ है। –

+0

विशेष रूप से क्योंकि 'ओ वैल्यू टाइप <स्ट्रिंग, रंग> '** ** काम करता है। –

+0

मुझे कार्यान्वयन विनिर्देशों को नहीं पता है, लेकिन मुझे लगता है कि आप तारांकन प्रतीक के साथ मिलान पैटर्न के बारे में बात कर रहे हैं, और यह एक अलग सुविधा की तरह लगता है जिसका इस सामान्य विशेषता पर कोई प्रभाव नहीं होना चाहिए। – user1306322

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