%>

通过数组或集合迭代。 此非标准关键字在 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 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> 的类型,或定义 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

另请参阅

适用于运行时平台的组件扩展
基于范围的 for 语句 (C++)