2015-11-08 16 views
19

मैं अपने सी # एक छोटा सा परियोजना के साथ चारों ओर खिलवाड़ किया गया था और मैं इस कोड देख कर हैरान था संकलित:निम्न कोड त्रुटियों के बिना संकलित क्यों करता है?

var a = new Action<string>(ref b => b = "hello"); 

यह दूसरी तरह के आसपास Flipping, Action<string> a = ref b => b = "hello"; की तरह 'रेफरी' में एक वाक्य त्रुटि दे देंगे।

A ref or out argument must be an assignable variable 

मैं संकलक में एक बग का सामना करना पड़ा है:

पर्याप्त ज़रूर, कॉपी-पेस्ट http://dotnetfiddle.net में टुकड़ा एक संकलक त्रुटि देता है? (मैं वी.एस. 2015 और सी # 6. उपयोग कर रहा हूँ)


संपादित करें: बस नेट फिडल पर रोसलिन संकलक का प्रयोग किया, यह अब भी वही त्रुटि उत्सर्जन करता है।

+2

मैं [tryroslyn] (http://goo.gl/00ZyS0) में इसे करने की कोशिश और हाँ: यह संकलित - व्यवहार में ही है, जैसे कि 'ref' वहां नहीं थे। एक बग की तरह दिखता है (जो संभवतया रिपोर्ट किया जाना चाहिए यदि पहले से नहीं किया गया है)। –

+2

@ लुकास ट्रेज़नेसविस्की वास्तव में। मैंने इसके बारे में [Roslyn GitHub repo] (https://github.com/dotnet/roslyn/issues/6646) को एक मुद्दा सबमिट कर दिया है। –

+0

अजीब। वाक्य रचनात्मक रूप से सही लैम्ब्डा '(रेफ स्ट्रिंग बी) => बी =" हैलो "के बारे में क्या है (ब्रांड्स और प्रकार 'स्ट्रिंग') को नोट करें, क्या इसे उस कंपाइलर के साथ' एक्शन 'में परिवर्तित किया जा सकता है? मेरे पास अभी विज़ुअल सी # 6 कंपाइलर तक पहुंच नहीं है। –

उत्तर

6

यह वीएस2015 में एक कंपाइलर बग की तरह लगता है। इस दायर के रूप में https://github.com/dotnet/roslyn/issues/6646

+1

नहीं, मेरा मतलब है "विजुअल स्टूडियो 2015" नामक उत्पाद के लिए कंपाइलर में। –

+0

* "यह एक जानबूझकर बग है जिसे हम बनाए रखते हैं ताकि मौजूदा कोड को तोड़ना न पड़े।" *। क्या कहना? : - \ –

0

मैं पहले Action

var a = new Action(ref b => b = "hello");

ref में लगता है कि पूरा कार्रवाई b=>b = "hello"

के लिए संदर्भ है, जबकि दूसरा

Action a = ref b => b = "hello";

में

ref रेफरी ख में b के लिए संदर्भ है => बी = "हैलो"

जांच नीचे fiddle

+2

'एक्शन' कन्स्ट्रक्टर का कोई अधिभार नहीं है जो रेफ तर्क द्वारा लिया जाता है, इसलिए इसे पहले मामले में अभी भी एक त्रुटि होनी चाहिए। –

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