लिंक क्वेरी में घोषित स्थानीय चर का दायरा क्या है।लिनक अज्ञात विधि (बंद) में स्थानीय चरणीय दायरा
मैं निम्नलिखित कोड
static void Evaluate()
{
var listNumbers = Enumerable.Range(1, 10).Select(i => i);
int i = 10;
}
संकलक लाइन पूर्णांक मैं = 10 पर त्रुटि चिह्नित किये लिख रहा था,
A local variable named 'i' cannot be declared in this scope because it would give a different meaning to 'i', which is already used in a 'child' scope to denote something else
बताते हुए मुझे समझ में क्यों इस त्रुटि आ रहा है असमर्थ हूँ।
मेरी समझ यह थी कि i
पहली पंक्ति (फोरैच लूप में) के बाद दायरे से बाहर हो जाएगा। तो i
फिर से घोषित किया जा सकता है।
वास्तविक व्यवहार यह है कि i
को पहली पंक्ति (फ़ोरैच लूप में) के बाद एक्सेस नहीं किया जा सकता है, जो सही है। लेकिन i
को फिर से घोषित नहीं किया जा सकता है। यह अजीब लगता है।
EDIT यह एंड्रेस द्वारा प्रतिक्रिया के आधार पर एक निम्न प्रश्न है। जवाब बहुत अच्छा है, लेकिन आगे संदेह का कारण बनता है।
static void Evaluate3()
{
var listNumbers = Enumerable.Range(1, 10).Select(i => i);
var listNumbers1 = Enumerable.Range(1, 10).Select(i => i);
}
समारोह के तर्क के आधार पर मूल्यांकन कि .Select (i => मैं), और int i = 10, दोनों मैं, ब्लॉक और इसलिए जटिलता त्रुटि कार्य करने के लिए स्थानीय कर रहे हैं।
फ़ंक्शन Evaluate3 को संकलित नहीं करना चाहिए साथ ही विधि ब्लॉक में दो हैं, लेकिन यह किसी भी चेतावनी/त्रुटि के बिना सफलतापूर्वक संकलित हो रहा है।
प्रश्न, या तो दोनों मूल्यांकन और मूल्यांकन 3 संकलित नहीं होना चाहिए, या दोनों को संकलित करना चाहिए।
क्या आप वाकई linq कथन के साथ कोई समस्या है? यदि आप इसे 'select (x => x)' के रूप में दोबारा हटाते हैं तो क्या त्रुटि वास्तव में दूर जाती है? –
यह समस्या LINQ से संबंधित नहीं है। यह linq के अंदर lamda अभिव्यक्ति से संबंधित है। । चयन करें (x => x) -> हाँ त्रुटि दूर हो जाती है – Tilak
हम बड़े पैमाने पर linq का उपयोग करते हैं और मैं कभी भी ऐसा नहीं हुआ। कोशिश की और हाँ, मुझे एक ही शिकायत मिलती है। जो मैं वीडर मानता हूं वह यह है कि मेरे पास 'var listNumbers = संख्यात्मक। श्रेणी (1, 10) हो सकती है। चयन करें (i => i); var listNumbers2 = listNumbers.Cast()। चयन करें (i => i); 'और यह एक त्रुटि को फेंक नहीं देता है, भले ही मैं एक ही परिवर्तनीय नाम का उपयोग कर रहा हूं, एक बार एक पूर्णांक के रूप में और एक बार एक स्ट्रिंग के रूप में। ऐसा लगता है कि 'i' के दूसरे उपयोग में भी त्रुटि होनी चाहिए ... –