我找不到一种方法来正确搜索这个在互联网上,但奇怪的事情发生时,试图打印出一个简单的数组在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。
我知道这里发生了什么:
- MyArray(i)表示在索引i处存在的值,对吗?
- 在第一次迭代中调用MyArray(i)时,i的值= 1(因为第一个元素是1),因此MyArray(i)的值= MyArray(1) = 2。
- 此循环将一直持续到循环结束。
- 当你打印我,而它将打印元素串行明智即第一个元素将是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]来获取元素