C# में foreach लूप वेरिएबल को लैम्ब्डा एक्सप्रेशन में रेफरेंस द्वारा क्यों कैप्चर किया जाता है?
सभी को नमस्कार! मैं एक शुरुआती C# डेवलपर हूँ और foreach को लैम्ब्डा एक्सप्रेशन के साथ उपयोग करते समय एक बहुत अजीब व्यवहार का सामना किया।
मेरे पास यह कोड है:
```csharp
var actions = new List();
var numbers = new List { 1, 2, 3, 4, 5 };
foreach (var number in numbers)
{
actions.Add(() => Console.WriteLine(number));
}
foreach (var action in actions)
{
action();
}
```
मैंने उम्मीद की थी कि कंसोल पर यह आउटपुट होगा:
```
1
2
3
4
5
```
लेकिन इसके बजाय मैं यह देखता हूँ:
```
5
5
5
5
5
```
ऐसा क्यों होता है? मैंने पढ़ा है कि यह इस बात से संबंधित है कि C# foreach में लूप वेरिएबल को कैसे हैंडल करता है। लेकिन मुझे समझ नहीं आता कि यह हर इटरेशन पर "एक ही" वेरिएबल की तरह क्यों व्यवहार करता है, न कि नया बनाया जाता है। for लूप में, जहाँ तक मुझे पता है, सब कुछ सामान्य रूप से काम करता है।
क्या कोई समझा सकता है कि यहाँ मामला क्या है? और सबसे महत्वपूर्ण बात — अपेक्षित परिणाम पाने के लिए इस कोड को सही तरीके से कैसे ठीक करें? पहले से धन्यवाद!
<<>>
समस्या का कारण:
अभी तक कोई उत्तर नहीं।
लॉग इन करें उत्तर देने के लिए
ब्लॉग
2025 में वेब डेवलपमेंट के लिए 10 सर्वश्रेष्ठ C++ फ्रेमवर्क