C# の foreach ループ
Q: どのオブジェクト タイプが foreach ループをサポートしていますか?
答え: foreach
ループの中心的な使用には、MoveNext()
メソッドと Current
プロパティを持つオブジェクトを返す GetEnumerator()
メソッドが必要です。簡単に言えば、最も一般的な型は、IEnumerable
/IEnumerable<T>
を実装する型です。これには、ICollection
、ICollection<T>
、配列などの Collection<T>
/List<T>
の実装が含まれます。
どのように機能しますか?
foreach(int i in obj) {...}
形式の foreach
ループは、本質的に次と同等です:
<code class="language-csharp">var tmp = obj.GetEnumerator(); int i; // C# 4.0及之前版本 while(tmp.MoveNext()) { int i; // C# 5.0及之后版本 i = tmp.Current; {...} // 你的代码 }</code>
IEnumerator
オブジェクト (tmp
) は、コレクションの要素を反復処理し、反復ごとにループ変数にそれらの要素を割り当てるために使用されます。列挙子が Dispose()
メソッドをサポートしている場合、using
ステートメントを使用するのと同じように呼び出されます。
注: ループ変数宣言 "int i
" の場所は、C# 4.0 と C# 5.0 で異なります。 C# 5.0 ではループ内で宣言されますが、C# 4.0 ではループの外で宣言されます。この区別は、ループ内のクロージャまたはラムダ式でループ変数を使用する場合に重要です。
以上がforeach ループをサポートする C# オブジェクト タイプとその仕組みを教えてください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。