我在C#中有以下foreach
循环:
foreach(var item in mod)
{
int i;
i = i + 1;
if (i % 2 == 0)
{
string y = "even number";
}
}
为什么我得到局部变量未分配的消息。我想在这里找到偶数。
答案 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做什么?如果你需要,你如何回归? 你期待在某个时候爆发吗?如果项目没有项目怎么办???