2012-10-10 41 views
0

我有下面這段代碼:爲什麼我會收到錯誤「使用未分配的本地變量」?

string mybytes(int[] sbytes) 
{ 
    string bytesss; 
    for(int i=1; i< sbytes.GetUpperBound(0)+1;i++) 
    { 
     bytesss += "," + IntToHex(sbytes[i - 1]).ToString(); 
    } 
    return bytesss; 
} 

private string IntToHex(int number) 
{ 
    return string.Format("{0:x}", number); 
} 

爲什麼會不斷提高錯誤「未分配的局部變量的使用」?

+1

問問自己 - 什麼是'bytesss + = ...'碼嗎? –

+0

這應該是一個警告 – codingbiz

+1

@codingbiz,這是一個錯誤,而不是警告 – Habib

回答

0

string bytesss;

應該是

string bytesss = String.Empty;

試試。

+0

它的抱怨,因爲你沒有初始化bytesss,所以它不知道什麼樣的初始值給它。 – HypnoToad

+0

你應該修改你的答案,包括你的附加說明,發佈的評論通常是不理想 – psubsee2003

1

C#編譯器希望你到provide value to string variable before you use it,如果在執行期間does not go in the for loop as compiler does not know whether control will go in for loop怎麼辦。如果控制不進入循環方法將返回編譯器不喜歡的未分配的變量,並給你錯誤。你是using the value of variable before assigning it due to += operator所以你會get error due to this over here。分配空字符串可以防止我們編譯錯誤,因爲下面給出的語句分配空字符串。

string bytesss = string.Empty; 
+0

即使進入循環的時候,它仍然是一個未初始化的變量。 –

+0

感謝@Daniel Hilgarth,忽視它由於+ =,更新了我的答案 – Adil

0

那麼,你永遠不會在你的代碼中初始化bytesss

它改成這樣:

string bytesss = ""; 

實際上有兩個問題在你的代碼:

  1. 如果sbytes.GetUpperBound(0)返回0,你的循環將永遠不會進入,所以bytesss += ...永遠不會被執行。
  2. 即使輸入循環,仍然有問題。 bytesss += ...相當於bytesss = bytesss + ...。但是在循環的第一次迭代中,bytesss是什麼?它是未定義的,因爲它從來沒有被初始化。
+0

哦XD這是愚蠢的!謝謝btw XD – newbie

0

您已聲明該字符串而不初始化它。嘗試將其聲明爲「string bytess = String.Empty;」代替。 This essay是一個很好的起點。

0

在您的代碼中使用以下內容。它解決了這個問題。

string bytesss = string.Empty; 

string bytesss = ""; 
0

這裏的問題是,你是局部變量稱爲bytesss您嘗試來連接到它之前沒有被初始化。這樣做與嘗試將字符串連接爲null類似,但沒有任何意義。考慮下面的代碼。

string bytesss = null; 
bytesss += ","; 

,或者換一種方式......

string bytesss = null + ","; 

這些東西都不是有意義的,所以你需要確保bytesss設置爲某個初始值試圖串連之前。例如:

string bytesss = ""; 

string bytesss = string.Empty; 

最後,還有一些其他的事情可以做,使你的代碼更容易。如果你使用的是最新的.NET framework版本,並有LINQ,你可以做這樣的事情:

string mybytes(int[] sbytes) 
{ 
    return string.Join(",", sbytes.Select(i => IntToHex(i)).ToArray()); 
} 

,或者如果您使用的是舊版本,你可以做這樣的事情:

string mybytes(int[] sbytes) 
{ 
    List<string> list = new List<string>(); 

    foreach(int i in sbytes) 
     list.Add(IntToHex(i)); 

    return string.Join(",", list.ToArray()); 
} 
相關問題