है ऐसा इसलिए है क्योंकि foreach यकीन है कि प्रत्येक आइटम कंटेनर बदले बिना ठीक एक बार दौरा किया है, जिससे एक कंटेनर से अधिक पुनरावृति करने के लिए है, बुरा से बचने के लिए दुष्प्रभाव।
देखें: foreach in MSDN
यदि आप मतलब क्यों एक पूर्णांक की तरह एक तत्व में परिवर्तन पूर्णांकों का एक कंटेनर को प्रभावित नहीं करेगा, अच्छी तरह से इस वजह से इस मामले में यात्रा के चर एक मान प्रकार हो सकता है और नकल की जाती है उदाहरण के लिए:
// Warning: Does not compile
foreach (int i in ints)
{
++i; // Would not change the int in ints
}
यहां तक कि अगर यात्रा की चर एक संदर्भ प्रकार, जिसका संचालन एक नई वस्तु लौट आए, आप मूल संग्रह में बदलाव नहीं किया जाएगा, तो आप सिर्फ इस चर समय की सबसे करने के लिए फिर नियत किया जाएगा:
// Warning: Does not compile
foreach (MyClass ob in objs)
{
ob=ob+ob; // Reassigning to local ob, not changing the one from the original
// collection of objs
}
निम्न उदाहरण संभावित वास्तव में एक परिवर्तनशील विधि को फोन करके मूल संग्रह में वस्तु को संशोधित करने के होते हैं:
// Warning: Does not compile
foreach (MyClass ob in objs)
{
ob.ChangeMe(); // This could modify the object in the original collection
}
बनाम संदर्भ प्रकार मूल्य के संबंध में भ्रम से बचने के और परिदृश्यों कि ऊपर उल्लेख किया (अनुकूलन से संबंधित कुछ कारणों के साथ), एमएस ने पुनरावृत्ति के चर को readonly
बनाने का विकल्प चुना।
स्रोत
2010-10-23 15:46:04
क्या आप केवल पढ़ने के लिए जा रहा है, जबकि पाश से मतलब है? जबकि लूप एक निर्माण है; यह न तो केवल पढ़ने के लिए और न ही पढ़ना है। क्या आप शायद कुछ कोड पोस्ट कर सकते हैं और/या अपने प्रश्न को स्पष्ट कर सकते हैं, कृपया? धन्यवाद। – CesarGon
मुझे लगता है कि वह पुनरावृत्ति चर के बारे में बात कर रहा है, जैसा कि foreach (आइटम IItem inItemList) ... Item को असाइन नहीं किया जा सकता है। –
उन्होंने अब सवाल स्पष्ट किया है: वह थोड़ी देर के बजाय foreach के बारे में बात कर रहा है। – CesarGon