foreach
循环不会给你一个索引值,它会给你the value个元素.在你的例子中,第一个元素是1
,然后用like an index得到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 is '1', MyArray[i] is '2'
i is '2', MyArray[i] is '3'
i is '3', MyArray[i] is '4'
i is '4', MyArray[i] is '5'
i is '5', MyArray[i] is '6'
i is '6', MyArray[i] is '7'
i is '7', MyArray[i] is '8'
i is '8', MyArray[i] is '9'
i is '9', MyArray[i] is '0'
i is '0', MyArray[i] is '1'
为了避免混淆,不要将foreach
循环的变量命名为i
.称之为能更好地代表你Collection 中的每一个元素的东西.
foreach (var number in MyArray)
{
Console.WriteLine(number);
}
这不同于for
循环,for
循环(大多数情况下)与索引值一起工作
// this is why people call the for loop variable "i"
for (int index = 0; index < myArray.Length; index++)
{
var number = myArray[index];
}
有趣的是,有is种方法可以通过foreach循环获得索引值,但它更高级,并且使用LINQ.
foreach (var data in MyArray.Select((x, i) => new { Value = x, Index = i}))
{
var number = data.Value;
var index = data.Index;
}
不过别担心,只有在你真的需要的时候才有必要.