您是否必须在方法内初始化字符串变量?

时间:2014-10-03 03:41:34

标签: c# variables unassigned-variable

我正在用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");
    }
}

2 个答案:

答案 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就足够了。此值还可用于表示未找到的"姓氏"调用代码的条件。