C# の foreach ループの詳細: どのクラスを使用できますか?
C# の foreach ループは、プログラマがコレクション内の要素を簡単に反復処理できるようにする重要な機能です。ただし、効果的に使用するには、どのクラスが foreach ループを使用できるかを理解することが重要です。
foreach ループをサポートするクラス
すべてのクラスが foreach ループをサポートしているわけではありません。特定の条件を満たすクラスのみが foreach ループを使用できます。答えによると、重要なのはクラス内にパブリック GetEnumerator()
メソッドがあることです。このメソッドは、 bool MoveNext()
メソッドと T 型の Current
プロパティを持つオブジェクトを返す必要があります。
一般的な実装方法
実際には、この要件のより一般的な解釈は、IEnumerable
/IEnumerable<T>
インターフェイスを実装することです。これらのインターフェイスには、それぞれ IEnumerator
/IEnumerator<T>
の存在が必要です。
サポートされるデータ構造
ICollection
/ICollection<T>
インターフェースを実装するクラスも暗黙的に foreach ループをサポートします。これには、Collection<T>
、List<T>
、配列 (T[]) などの標準のコレクション型が含まれます。したがって、最も一般的に使用される「データ コレクション」は、foreach ループを使用して走査できます。
foreach ループの仕組み
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>
バリエーションとノート
IDisposable
を実装する場合、適切な破棄を保証するために using
ブロックのように呼び出されます。 int i
など) の宣言はループ本体の外側に配置されていましたが、C# 5.0 以降はループ本体内で宣言されます。この区別は、ネストされた匿名メソッドまたはラムダ式内でループ変数を使用する場合に重要になります。 以上がC# のどのクラスが Foreach ループをサポートしていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。