c#foreach循环偶数

时间:2012-01-18 22:25:02

标签: c#

我在C#中有以下foreach循环:

foreach(var item in mod)
{
    int i;

    i = i + 1;
    if (i % 2 == 0)
    { 
        string y = "even number"; 
    }
}

为什么我得到局部变量未分配的消息。我想在这里找到偶数。

8 个答案:

答案 0 :(得分:12)

要解决您收到的消息,您只需要初始化它:

int i = 0;

如果您打算计算每件商品,那么您还需要将i的范围更改为foreach之外。否则,正如您最初发布的那样,变量i对于循环的每次迭代都将具有相同的值。

有关初始化和范围更改的信息,请参阅此代码段:

 int i = 0;
 foreach (var item in mod)
 {
     i = i + 1; // is the first item considered even or odd?  that answer changes where this should go

     if (i % 2 == 0) { 
         string y = "even number"; 
     }
 }  

答案 1 :(得分:5)

您需要初始化i变量:

int i = 0;

您目前正在尝试将+ 1转换为未分配的变量。

答案 2 :(得分:4)

您收到警告是因为在i中使用i = i + 1之前未指定i。您希望在foreach循环之外声明0,因此它不受循环范围的约束。然后使用int i = 0; foreach (var item in mod) { i++; if (i % 2 == 0) { string y = "even number"; } } 初始化并使用增量功能。类似的东西:

{{1}}

答案 3 :(得分:3)

其他人在这里建议的替代方法(虽然正确)将是使用for循环,这将照顾我,例如。

for (int i = 0; i < mod.length; i++)
{
    if (i % 2 == 0)
    {
      string y = "even number";
    }
}

答案 4 :(得分:2)

更改此内容:int i;

int i = 0;

C#中的值类型与int有默认值,但仍然不允许使用未分配的值类型变量。

答案 5 :(得分:2)

您必须先为i分配初始值,然后才能i=i+1

答案 6 :(得分:2)

你必须初始化我。现在编译器正在读取这个内存中的i = garbage。所以你在内存中有垃圾=内存中的垃圾+ 1.我可以等于一个字符串,一个数字或任何东西。

 int i = 0;

此外,您需要在for ... each循环之外初始化该变量,否则它将继续将自身重置为0。

 int i = 0;

 foreach(var item in mod){
     i = i + 1;

     if (i % 2 == 0) { 
         string y = "even number"; 
     }
 }  

答案 7 :(得分:1)

   int i = 0;
   foreach(var item in mod)
   {
     if (i % 2 == 0) 
     { 
         string y = "even number"; 
     }
      i = i + 1;
    }  

//你在用y做什么?如果你需要,你如何回归? 你期待在某个时候爆发吗?如果项目没有项目怎么办???