ホームページ > バックエンド開発 > C++ > C# のどのクラスが Foreach ループをサポートしていますか?

C# のどのクラスが Foreach ループをサポートしていますか?

Linda Hamilton
リリース: 2025-01-10 08:43:43
オリジナル
979 人が閲覧しました

What Classes in C# Support Foreach Loops?

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>
ログイン後にコピー

バリエーションとノート

  1. IDisposable サポート: 列挙子 (tmp) が IDisposable を実装する場合、適切な破棄を保証するために using ブロックのように呼び出されます。
  2. 宣言の場所: C# 5.0 より前では、ループ変数 (int i など) の宣言はループ本体の外側に配置されていましたが、C# 5.0 以降はループ本体内で宣言されます。この区別は、ネストされた匿名メソッドまたはラムダ式内でループ変数を使用する場合に重要になります。

以上がC# のどのクラスが Foreach ループをサポートしていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート