请使用未赋值的局部变量

本文关键字:局部变量 赋值 请使用 | 更新日期: 2023-09-27 18:02:06

我创建了很多for循环,想要放置从整型到字符串的值。

String strasze = dataGridView1.Rows[rows].Cells[straszeint].Value.ToString();
String stadt = dataGridView1.Rows[rows].Cells[stadtint].Value.ToString();
land = dataGridView1.Rows[rows].Cells[landint].Value.ToString();
hersteller = dataGridView1.Rows[rows].Cells[colIndex].Value.ToString();
kundennummer = dataGridView1.Rows[rows].Cells[kundennummerint].Value.ToString();
haendler = dataGridView1.Rows[rows].Cells[haendlerint].Value.ToString();

下面是一个for循环的例子:

int landint;
for (int i = 0; i < datagridview.Columns.Count; i++)
{
    if (datagridview.Columns[i].Name.Equals(landname))
    {
        landint = i;
        break;
    }
}

怎么了?它显示了错误straszeint,stadtint,landint

//编辑

int straszeint;
for (int i = 0; i < datagridview.Columns.Count; i++)
{
    if (datagridview.Columns[i].Name.Equals(straszennamen))
    {
        straszeint = i;
        break;
    }
}

请使用未赋值的局部变量

从您的代码来看,straszeint可能从未被分配值。假设datagridview.Columns.Count为0,或者没有与名称匹配的列。那么straszeint永远不会被设置为一个值。

编译器不知道你知道什么,所以它只是检查所有的路径,看看是否有一个未设置的变量可能存在问题。

这里最简单的方法是将变量设置为任意数字,稍后再检查:
int straszeint = -1;
for (int i = 0; i < datagridview.Columns.Count; i++)
    ...
if (straszeint == -1)
{
    throw new Exception("Column 'straszennamen' could not be found!");
}

这是因为编译器比开发人员更聪明

你应该在访问局部变量的值之前初始化它们,在你的情况下,可能会跳过循环的迭代,或者循环中的条件在所有迭代中都会被计算为false。并且在迭代之后使用值(例如straszeint)。

编译器期望这种情况,这就是为什么它显示这样的错误。

您可以简单地通过使用0或任何其他由您决定的值初始化变量来解决这个问题。

int straszeint=-1;
for (int i = 0; i < datagridview.Columns.Count; i++)
{
   if (datagridview.Columns[i].Name.Equals(straszennamen))
   {
     // Let it is false for all iterations
     straszeint = i;
     break;
   }
}
// straszeint will be -1 here if the condition is false for all iteration
if(straszeint!=-1)
{
   //Proceed with the action
}

为什么要用-1来初始化0

.Cells将遵循基于0的索引,因此即使条件计算结果为false,它也会给出First单元格值。