4

forループでクラス ' SomeClass 'の新しいオブジェクトを作成できるのはなぜかといつも思っていますが、 foreachループでは同じことはできません。

例は次のとおりです。

SomeClass[] N = new SomeClass[10];

foreach (SomeClass i in N) 
{
   i = new SomeClass(); // Cannot assign to 'i' because it is a 'foreach iteration variable'
}

for (int i = 0; i < N.Length; i++) 
{
   N[i] = new SomeClass(); // this is ok
}

誰でもこのシナリオを説明できますか?

4

2 に答える 2

4

foreach反復ループは「読み取り専用コンテキスト」として知られています。読み取り専用コンテキストでは変数に代入できません。

詳細情報: http://msdn.microsoft.com/en-us/library/369xac69.aspx

于 2013-07-21T18:07:47.427 に答える
3

Foreach ループは、IEnumerable オブジェクトを反復処理します。

内部的には、上記のコードは次のようになります

using(var enumerator=N.GetEnumerator())
while(enumerator.MoveNext())
{
    enumerator.current=new SomeClass();//current is read only property so cant assign it
}

上記のコメントで述べたように、現在のプロパティはIEnumeratorの読み取り専用プロパティです。したがって、それに何かを割り当てることはできません

于 2013-07-21T18:12:28.753 に答える