【问题标题】:Do you have to initialize a string variable inside a method?您是否必须在方法中初始化字符串变量?
【发布时间】:2014-10-03 03:41:34
【问题描述】:

我正在使用 C# 进行编程,但我的字符串变量 result 不断出现错误。

当我将鼠标悬停在return result 行上时,它表示使用未分配的局部变量。

我必须在使用前给结果赋值吗?为什么SqlDataReader reader 没有出现同样的错误?

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");
    }
}

【问题讨论】:

    标签: c# variables unassigned-variable


    【解决方案1】:
    if (reader["LastName"].ToString() == lastname)
    

    如果这不是真的,那么result 就不会被初始化。 SqlDataReader 总是在使用之前进行初始化。只需初始化字符串。

    var result = "";
    

    【讨论】:

    • 不好的做法。使用 var 结果 = String.Empty;
    • @DanHunex:不,谢谢,请解释为什么您认为这是“不好的做法”。由于字符串实习,在相当长的一段时间内没有任何实际的语义差异。你只是喜欢打字吗?
    • 你认为为什么要添加String.IsNullOrWhitespace?因为人们有时会写“”而不是“”。但是 String.Empty 总是保证它是空的
    • @DanHunex:他们有吗?诡异的。在十多年的工作中,我从未见过这种错误。我想我会坚持"",不过谢谢。 PS:几乎可以肯定,IsNullOrWhitespace 在尝试将变量初始化为空字符串时没有添加以解决拼写错误。它旨在检查空的 input,而不是错误初始化的变量。
    • 嗯,你也可以看到这个,但我不是想用超过 10 年的经验来说服你 stackoverflow.com/questions/2905378/string-empty-versus
    【解决方案2】:

    编译器需要知道你已经明确地为一个变量赋值,在你使用那个值的时候。

    在您的情况下,reader 始终被分配一个值 (reader = myCommand.ExecuteReader();),但 result 不是,因为这取决于 reader["LastName"].ToString() == lastname 是否为真,这可能永远不会发生(即使您将系统设计为实际上你总能找到一个匹配 - 编译器不知道)。

    因此,在您进入该 while 循环之前,您必须指定一个值。 result = null 就足够了。此值还可用于向调用代码发出“未找到姓氏”的信号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多