2013-12-12 29 views
2

我創建從存儲過程中的類的實例,但我得到以下錯誤:使用從創建未分配的局部變量(對象)的存儲過程

使用未分配的局部變量「成員」

的我有以下代碼:

Member member; 
while (rdr.Read()) 
{ 
    member = new member(rdr.GetInt32, rdr.GetString(1)); // Populate Class from Stored Procedure 
} 
return member 

我認識到,編譯器不知道while循環會一直被觸發但是什麼是解決這個不創建一個默認的構造函數最徹底的方法?

回答

2

編譯器不能確定你的for循環條件是否真實,member將被初始化。所以錯誤。

由於在循環內部完成循環和實例化之後您將返回member。不保證member將被初始化/分配一個值。在第一次迭代中,rdr.Read()可能會返回false。

你可以這樣做:

Member member = default(Member); //null for reference type 
while (rdr.Read()) 
{ 
    member = new member(rdr.GetInt32, rdr.GetString(1)) // Populate Class from Stored Procedure 
} 
return member; 

在你的代碼的其他錯誤是rdr.GetInt32使用,它是一種方法,並應具有的列序號等確定:

rdr.GetInt32(0) 
0

問題:

  1. 你應該之前while循環分配member變量,compiler無法識別閹循環將肯定或不執行。

  2. 您需要指定列號,同時使用GetInt32()函數。

解決方案:

  1. 分配memebrnull最初。
  2. 使用所需欄indexGetInt32()功能。

試試這個:

Member member=null; 
while (rdr.Read()) 
{ 
    member = new member(rdr.GetInt32(0), rdr.GetString(1)); // Populate Class from Stored Procedure 
} 
return member; 
相關問題