C# 循环遍历数组问题的内容
我使用一个整数数组来保存一长串整数。对于这个数组的每个元素,我想检查它是否为1,如果是,则只做与1相关的事情,否则如果是2,则对数组中存储的每个值做其他与2相关的事情,依此类推。我想出了下面的代码,但它没有像预期的那样工作,有什么我遗漏的吗?发生的情况是,只考虑数组的第一个值C# 循环遍历数组问题的内容,c#,C#,我使用一个整数数组来保存一长串整数。对于这个数组的每个元素,我想检查它是否为1,如果是,则只做与1相关的事情,否则如果是2,则对数组中存储的每个值做其他与2相关的事情,依此类推。我想出了下面的代码,但它没有像预期的那样工作,有什么我遗漏的吗?发生的情况是,只考虑数组的第一个值 int[] variable1 = MyClass1.ArrayWorkings(); foreach (int i in variable1) { if (variable1[i] == 1) {
int[] variable1 = MyClass1.ArrayWorkings();
foreach (int i in variable1)
{
if (variable1[i] == 1)
{
// arbitrary stuff
}
else if (variable1[i] ==2)
{
//arbitrary stuff
}
}
你试图做一些毫无意义的事情。为了了解它是如何工作的,我们举一个简单的例子,一个值为9、4、1的数组 如果尝试在此示例阵列上运行代码,将出现错误:
foreach (int i in variable1)
{
if (variable1[i] == 1) // the item i is 9.
// But variable[i] means, get the value at position #9 in the array
// Since there are only 3 items in the array, you get an Out Of Range Exception
{
// arbitrary stuff
}
{
相反,这是您需要的:
foreach (int i in variable1) // i will be 9, then 4, then 1)
{
if (i == 1)
{
// arbitrary stuff
}
// ... etc
}
另一种方法是使用for循环,它将为您提供索引0、1和2,如下所示:
for (int i=0 ; i<=variable1.Length ; i++) // i will be 0, 1, 2
// variable[i] will be 9, 4, 1
{
if (variable1[i] == 1)
{
// stuff
}
// ... etc
}
for(int i=0;iforeach
循环中的i
保存每次迭代中数组中的实际元素值,而不是索引。在特定的代码示例中,数组可能只保存零,这就是为什么只获取第一个元素(始终使用索引0
)因此,您应该检查i
而不是variable1[i]
如果要检查各种整数常量,则更适合使用开关表达式,顺便说一句:
foreach (int i in variable1) {
switch (i) {
case 1:
// arbitrary stuff
break;
case 2:
// arbitrary stuff
break;
}
}
开关
/大小写
可以节省一些书写时间;如果您从i
以外的任何地方提取值,只需更改(i)是switch
语句中的一部分,而且,编译器对switch
的计算效率可能高于链接的if
-else
语句
注意:您将无法在foreach
循环中直接更改数组值,因为您无法将任何内容分配给i
。如果需要分配新数组值,您必须
- 在仍然使用
foreach
或
- 对
使用另一个循环,如,然后自己在当前索引中检索该项
改为这样写:
foreach (int i in variable1) {
if (i == 1) {
....
您获取的i
不是索引,而是值。因此用1或2检查i
如果您使用for循环,那么您的内部代码就会工作得很好
int[] variable1 = MyClass1.ArrayWorkings();
foreach (int i in variable1)
{
switch(i)
{
case 1:
// arbitrary stuff
break;
case 2:
//arbitrary stuff
break;
}
}
尝试使用switch case。如果没有,则比正常情况下快得多。这是有意义的,但是在更改代码(for(int i=0;i@user1166981只有当a.第一个条件始终为true,或b.如果数组{2,2,2,2,2,2,2,1}中有10个项,则使用break或return停止迭代,才会考虑第一个元素,您发布的最后一个代码示例应该计算每个元素,对吗?因此,如果我在每个if语句下都有逻辑,那么MyVariable=MyVariable+I;总数应该是19还是2?@user1166981似乎应该是19。一定有其他事情发生了;发布代码可能吗?好的,我应该更新我原来的帖子并在编辑框中显示原因吗?