2013-12-12 31 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; 
相关问题