我有这个:
foreach (Software.dsBDD.list_table21 row in dataTable.Rows)
{
PictureBox box;
MemoryStream stream;
Panel panel;
Label label;
bool? pass;
if (this.pass.HasValue && this.end)
{
pass = this.pass;
}
if ((pass.GetValueOrDefault() && pass.HasValue) || row.view_only)
}
变量"传递"靠近" GetValueOrDefault"下划线为错误:"使用未分配的局部变量传递"。我不明白为什么这个变量是未分配的,因为在同一行中有" pass"靠近" HasValue"它被分配了。我的语法错误在哪里?!
答案 0 :(得分:3)
您尝试在实际分配之前使用它。为其指定null。
bool? pass = null;
答案 1 :(得分:2)
有条件地分配pass
变量并不能为每种可能的情况安全地分配它。使用@ MyP3uK解决方案并将其分配到您声明的同一行的null
。
话虽这么说,你仍有可能混淆pass
和this.pass
。我肯定会使用另一个名称作为局部变量。此外,选择bool?
而不是bool
对我来说似乎是错误的选择。
答案 2 :(得分:1)
您想要执行以下任一操作:
确保在使用之前分配给您的本地pass
:在每次迭代时,本地pass
都将恢复为null
。
foreach (Software.dsBDD.list_table21 row in dataTable.Rows)
{
PictureBox box;
MemoryStream stream;
Panel panel;
Label label;
bool? pass = null; //this line has changed
if (this.pass.HasValue && this.end)
{
pass = this.pass;
}
if ((pass.GetValueOrDefault() && pass.HasValue) || row.view_only)
}
使用普通bool而不是可空的bool,在每次迭代时,本地pass
将被设置为默认值,即false:
foreach (Software.dsBDD.list_table21 row in dataTable.Rows)
{
PictureBox box;
MemoryStream stream;
Panel panel;
Label label;
bool pass; //this line has changed
if (this.pass.HasValue && this.end)
{
pass = this.pass;
}
if ((pass.GetValueOrDefault() && pass.HasValue) || row.view_only)
}
如果您需要在下一次迭代中使用上一次迭代中的值,请在foreach范围之前定义pass
:
bool? pass = null; //this line has changed
foreach (Software.dsBDD.list_table21 row in dataTable.Rows)
{
PictureBox box;
MemoryStream stream;
Panel panel;
Label label;
if (this.pass.HasValue && this.end)
{
pass = this.pass;
}
if ((pass.GetValueOrDefault() && pass.HasValue) || row.view_only)
}
如果pass包含您实际需要的值,我担心这些是您唯一的选择。
答案 3 :(得分:0)
并不总是分配局部变量pass
。如果输入if
块,则仅在您的代码中分配。我可以说,这就是你要做的事情:
bool pass = this.pass.HasValue && this.end;
if (pass && row.view_only)