2014-10-03 79 views
1

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

回答

3
if (reader["LastName"].ToString() == lastname) 

如果這是不正確的,然後result未初始化。在使用之前,SqlDataReader總是被初始化。只需初始化字符串。

var result = ""; 
+1

不好的做法。使用var result = String.Empty; – 2014-10-03 04:11:09

+0

@DanHunex:不,謝謝你,請解釋你爲什麼認爲這是一種「壞習慣」。由於字符串實習,在一段時間內沒有任何實際的語義差異。你只喜歡打字嗎? – 2014-10-03 04:12:33

+0

爲什麼你認爲String.IsNullOrWhitespace被添加?因爲人們有時會寫「」而不是「」。但是String.Empty總是保證它是空的 – 2014-10-03 04:17:31

0

編譯需要知道你已經明確賦值給一個變量,在您使用該值是點。

在你的情況reader總是被分配一個值(reader = myCommand.ExecuteReader();),但result不是,因爲這取決於reader["LastName"].ToString() == lastname是真實的,它可能永遠不會發生(即使你設計的系統,以便在現實中,你總能找到一個匹配 - 編譯器不知道)。

因此,在你輸入while-loop之前,你必須指定一個值。 result = null就足夠了。該值也可用於向調用代碼發出「未找到姓」的信號。

相關問題