我正在用C#编程,我的字符串变量result
一直出错。
当我将鼠标悬停在return result
行上时,它表示使用了未分配的局部变量。
在使用之前,我是否必须为结果赋值?为什么SqlDataReader
读者没有得到同样的错误?
string searchbyLastName(string lastname)
{
string result;
SqlDataReader reader;
try
{
reader = myCommand.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
if (reader["LastName"].ToString() == lastname)
{
result = reader.GetString(0);
break;
}
}
return result;
}
else
return "No results found";
}
catch (Exception)
{
return("Database Error");
}
}
答案 0 :(得分:3)
if (reader["LastName"].ToString() == lastname)
如果情况永远不成立,则result
未初始化。 SqlDataReader
始终在使用前初始化。只需初始化字符串。
var result = "";
答案 1 :(得分:0)
编译器需要知道在使用该值时,您已明确为变量赋值。
在您的情况下reader
始终会分配一个值(reader = myCommand.ExecuteReader();
),但result
不是,因为这取决于reader["LastName"].ToString() == lastname
是否为真,这可能是永远不会发生(即使你设计了系统,实际上你总能找到一个匹配 - 编译器也不知道)。
所以在你进入while循环之前的某个地方你必须分配一个值。 result = null
就足够了。此值还可用于表示未找到的"姓氏"调用代码的条件。