for each, in

配列またはコレクションを反復処理します。 この非標準キーワードは、C++/CLI プロジェクトとネイティブ C++ プロジェクトの両方で使用できます。 ただし、代わりに、標準の Range ベースの for ステートメント (C++) を使用することをお勧めします。

すべてのランタイム

構文

for each ( type identifier in expression ) {
statements
}

パラメーター

type
identifier の型。

identifier
コレクション要素を表す繰り返し変数。 identifier追跡参照演算子のときは、要素を変更できます。

expression
配列式またはコレクション。 コレクション要素は、コンパイラが identifier 型に変換できるようにする必要があります。

statements
実行する 1 つ以上のステートメントを指定します。

解説

コレクションを反復処理するために、for each ステートメントを使用します。 コレクション内の要素を変更することはできますが、要素を追加したり削除したりすることはできません。

statementsは、配列またはコレクション内の各要素に対して実行されます。 コレクション内の全要素に対する繰り返しが完了すると、制御は、for each ブロックに続くステートメントに移動します。

for eachin状況依存のキーワードです。

Windows ランタイム

要件

コンパイラ オプション: /ZW

この例では、for each を使用して文字列を反復処理する方法を示します。

// for_each_string1.cpp
// compile with: /ZW
#include <stdio.h>
using namespace Platform;

ref struct MyClass
{
   property String^ MyStringProperty;
};

int main()
{
   String^ MyString = ref new String("abcd");

   for each ( char c in MyString )
   {
      wprintf("%c", c);
   }

   wprintf("\n");

   MyClass^ x = ref new MyClass();
   x->MyStringProperty = "Testing";

   for each( char c in x->MyStringProperty )
   {
      wprintf("%c", c);
   }
}
abcd
Testing

共通言語ランタイム

解説

CLR の構文は次の点を除き、すべてのランタイム構文と同じです。

expression
マネージド配列式またはコレクション。 コレクション要素は、コンパイラが Object から identifier 型に変換できるようにする必要があります。

expressionは、IEnumerableIEnumerable<T>、またはIEnumeratorを実装する型を返すか、IEnumeratorで定義されているすべてのメソッドを宣言するGetEnumerator メソッドを定義する型に評価されます。

要件

コンパイラ オプション: /clr

この例では、for each を使用して文字列を反復処理する方法を示します。

// for_each_string2.cpp
// compile with: /clr
using namespace System;

ref struct MyClass
{
   property String ^ MyStringProperty;
};

int main()
{
   String ^ MyString = gcnew String("abcd");

   for each ( Char c in MyString )
   {
      Console::Write(c);
   }

   Console::WriteLine();

   MyClass ^x = gcnew MyClass();
   x->MyStringProperty = "Testing";

   for each( Char c in x->MyStringProperty )
   {
      Console::Write(c);
   }
}
abcd
Testing

関連項目

ランタイム プラットフォームのコンポーネントの拡張機能
範囲ベースの for ステートメント (C++)