%>
通过数组或集合迭代。 此非标准关键字在 C++/CLI 和本机 C++ 项目中可用。 但是,更推荐使用标准的 Range-Based for 语句 (C++) 来进行循环遍历。
所有运行时
语法
for each (
type
identifier
in
expression
) {
statements
}
参数
type
identifier
的类型。
identifier
代表集合元素的迭代变量。 identifier
为跟踪引用运算符时,可以修改元素。
expression
数组表达式或集合。 集合元素必须让编译器能将其转换为 identifier
类型。
statements
要执行的一个或多个语句。
注解
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> 的类型,或定义 GetEnumerator
方法(此方法可返回实现 IEnumerator 的类型或声明 IEnumerator
中定义了所有方法)的类型。
要求
编译器选项:/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