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 each
と in
は状況依存のキーワードです。
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
は、IEnumerable、IEnumerable<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