在foreach循环中打印MyArray[i]



我找不到一种方法来正确搜索这个在互联网上,但奇怪的事情发生时,试图打印出一个简单的数组在visual studio与foreach循环。

int[] MyArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
foreach (int i in MyArray)
{
Console.WriteLine(MyArray[i]);
}

我敢像在for循环中那样使用它来迭代,结果在命令提示符上显示为;

1.

我不能最后说"这不是正确的方式";然后继续前进。如下图所示:

foreach (var i in MyArray)
{
Console.WriteLine(i);
}

有人能帮我激发我的好奇心吗?它是如何成功运作的,同时又悄无声息地失败的?

foreach循环不给你一个索引值,它给你元素的值。在您的示例中,第一个元素是1,然后使用像索引一样来获得2

下面是你的代码,在WriteLine方法中有一些额外的信息来说明发生了什么

int[] MyArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
foreach (int i in MyArray)
{
Console.WriteLine($"i is '{i}', MyArray[i] is '{MyArray[i]}'");
}
i为'1',MyArray[i]为'2'i是'2',MyArray[i]是'3'i是'3',MyArray[i]是'4'i是'4',MyArray[i]是'5'i是'5',MyArray[i]是'6'i是'6',MyArray[i]是'7'i是'7',MyArray[i]是'8'i是'8',MyArray[i]是'9'i是'9',MyArray[i]是'0'i为'0',MyArray[i]为'1'

为避免混淆,不要将foreach循环的变量命名为i

foreach (var number in MyArray)
{
Console.WriteLine(number);
}

这与for循环不同,后者(大多数时候)使用索引值

// this is why people call the for loop variable "i"
for (int index = 0; index < myArray.Length; index++)
{
var number = myArray[index];
}

有趣的是,一种通过foreach循环获取索引值的方法,但它更高级,使用LINQ。

foreach (var data in MyArray.Select((x, i) => new { Value = x, Index = i}))
{
var number = data.Value;
var index = data.Index;
}

不要担心这个,只有在你真的需要的时候才需要。

foreach迭代数组的VALUES,而不是它的索引,而您的输出是基于索引的。它恰好有10个值,所有值都是有效的索引,否则它会崩溃。

的例子:第一次迭代foreach时,i是第一个VALUE "1",所以MyArray[1]正确返回2。

我知道这里发生了什么:

  1. MyArray(i)表示在索引i处存在的值,对吗?
  2. 在第一次迭代中调用MyArray(i)时,i的值= 1(因为第一个元素是1),因此MyArray(i)的值= MyArray(1) = 2。
  3. 此循环将一直持续到循环结束。
  4. 当你打印我,而它将打印元素串行明智即第一个元素将是1,第二个将2等等。这样你就得到了差别。我希望我的回答足够清楚。

for循环和foreach循环有区别

foreach循环允许在数组的每个element上执行给定的函数在您的示例

int[] MyArray = { 3,4 };
foreach (var i in MyArray)
{
Console.WriteLine(i);
}

i将是3或4

but for循环创建一个由三个可选表达式组成的循环,由分号分隔,并由圆括号括起来

int[] MyArray = { 3,4 };
for (var i=0;i<MyArray.Count();i++)
{
Console.WriteLine(MyArray[i]);
}

i将为0或1,因为它包含元素的位置,你必须使用MyArray[i]来获取元素

最新更新