正在加载...

foreach

string[] plants = { "leaf", "mint" }; 存两个词。然后 foreach (string plant in plants) 把每个词交给名字 plant,Console.WriteLine(plant) 把它写出。屏幕显示两行:leaf,再 mint。本页不写索引计数器。请保留公共类名 Pine。

数组里每个值一个名字

打开 Pine 文件。类名保持 Pine。本页不重命名类型。若仍有带 break 或 continue 的 for,请删掉。若仍有计数的 for (int i = 1; i <= 5; i = i + 1),也请删掉。删掉任何 ReadLine 行。你保留的文件不等待输入,没有提前的 break,也没有索引计数器。屏幕只由 foreach 花括号里的写出语句写出。

在 Main 里先存数组:string[] plants = { "leaf", "mint" };。那一行不写屏幕。它只把两个词放在名字 plants 下。然后循环:
foreach (string plant in plants) {
Console.WriteLine(plant);
}
词 foreach 全小写,写成一个词。圆括号里依次是元素类型 string、一个元素的名字 plant、词 in,再是数组名 plants。这个 in 不是路径,也不是 case 标签。它表示「plants 里的每个值进入 plant。」花括号包住循环体。Console.WriteLine(plant); 写出当前词,且 plant 不加引号。请保存文件。

你保留的文件

保持这种教学形状。一个名为 plants 的 string[],先存 leaf 再存 mint。一个带 string plant in plants 的 foreach。一条写出语句,写出裸名 plant。没有索引 i,没有 break,也没有给 plant 加引号。

string array walk

csharp
using System;

public class Pine
{
    public static void Main()
    {
        string[] plants = { "leaf", "mint" };
        foreach (string plant in plants)
        {
            Console.WriteLine(plant);
        }
    }
}

从上往下读。using System; 准备短名。public class Pine 命名类型。public static void Main() 是运行时入口。string[] plants = { "leaf", "mint" }; 存两个词。foreach (string plant in plants) 遍历它们。Console.WriteLine(plant); 写出每个词。屏幕两行:leaf,再 mint。

用 dotnet run 运行。程序写出两行然后结束。它不等你输入。若 dotnet run 卡住,说明文件里还有 ReadLine。删掉那一行,保留上面的数组和 foreach。屏幕显示 leaf,再 mint。若屏幕只显示 leaf,你可能仍停在只写一次 plants[0] 的数组页。请改成 foreach。若屏幕每行都显示字母 plant,说明写出语句加了引号:Console.WriteLine("plant");。若屏幕显示字母 foreach,说明某条写出语句给这个词加了引号。不要因为屏幕行不对就重装 .NET SDK。

按顺序走完一次完整运行。plants 先存 leaf,再存 mint。第一轮把 plant 设为 leaf,写出语句写出 leaf。第二轮把 plant 设为 mint 并写出 mint。然后没有更多值,循环结束。本页你没有写 int i = 0 或 i < plants.Length。foreach 行头请 C# 把每个已存值访问一次。名字 plant 在行头声明一次,写作 string plant。

用同样方式遍历 int 数组

改已存数组和元素类型,让每个值都是整数。用 int[] slots = { 2, 4, 6 };,以及带 Console.WriteLine(n); 的 foreach (int n in slots)。现在屏幕应显示三行:2,再 4,再 6。词 in 仍坐在元素名与数组名之间。循环体仍写出保存一个元素的那个名字。

int array walk

csharp
using System;

public class Pine
{
    public static void Main()
    {
        int[] slots = { 2, 4, 6 };
        foreach (int n in slots)
        {
            Console.WriteLine(n);
        }
    }
}

这是第二个文件。它不是你要保留的文件。运行 dotnet run。屏幕显示三行。你把 string 数组换成了 int 数组,并把元素名的类型与 int 对齐。看过 2、4 和 6 之后,把保留文件放回去:plants 配 foreach (string plant in plants)。两个版本都是合法的 C#。它们用不同元素种类教同一种 foreach 形状。

再读一遍 int 这次运行。slots 先存 2,再存 4,再存 6。第一轮把 n 设为 2 并写出。第二轮把 n 设为 4 并写出。第三轮把 n 设为 6 并写出。然后循环结束。数组花括号里的数字不加引号。Console.WriteLine(n) 不给 n 加引号,就把这些已存数字写到屏幕。

让 foreach 保持清楚的规则

圆括号里必须按顺序放类型、名字、in 和数组名。写成没有 in 的 foreach (string plant plants) 会让生成报错。元素类型必须匹配数组:string 配 string 数组,int 配 int 数组。把 string plant 放在 int[] 数组旁边,不是本课要建的形状。当循环体有一行或多行时,花括号仍包住循环体。

foreach 不是更早一页的计数 for,也不是上一页的 break。计数 for 用计数器写起始、条件和步进。foreach 遍历数组里已经存好的值。break 提前结束循环;本页第一个演示写出每一个值。不要在同一个 Main 里留下 break 演示或普通 while,却奇怪屏幕为何显示 1 和 2 而不是 leaf 和 mint。本课的 Main 应只放数组和 foreach。

常见混淆是写出语法本身:Console.WriteLine("foreach");。那写出的是字符 foreach。它并不遍历数组。另一种混淆是带引号的 Console.WriteLine("plant");,每一轮写出字母词 plant,而不是 leaf 和 mint。当你想在屏幕上看到元素值时,请保持不加引号的 Console.WriteLine(plant)。

若数组没有元素——例如 string[] plants = { };——循环体从不运行,屏幕保持空白。这仍是合法的 foreach;本课演示至少保留两个值,好让你看到写出的行。以后若需要在屏幕上显示索引号,计数 for 会回来;foreach 用来访问值,而不必自己管理那个索引。在循环里用 plant = "stem"; 改值,在本入门形状下不会改写数组槽——把 plant 当作你读出来用于写出的值,而不是编辑 plants 的工具。

你现在可以存一个数组,写 foreach (Type name in arrayName),并把每个值写出一次。让元素类型匹配数组,循环才能顺利生成。下一页是 methods:把行归到一个可从 Main 调用的名字下。

屏幕就是每个数组值

你保留的文件写出 leaf,再 mint。名字 plant 在写出语句里,字母 plant 不会作为标签出现在屏幕上。词 in 在圆括号里,in 不会出现在屏幕上。给 plant 或 foreach 加引号会写出字母,而不是数组遍历。

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
6
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部