C# 使用从存储过程创建的未分配局部变量(对象)
我正在从存储过程创建类的实例,但出现以下错误: 未分配局部变量“member”的使用 我有以下代码:C# 使用从存储过程创建的未分配局部变量(对象),c#,stored-procedures,C#,Stored Procedures,我正在从存储过程创建类的实例,但出现以下错误: 未分配局部变量“member”的使用 我有以下代码: Member member; while (rdr.Read()) { member = new member(rdr.GetInt32, rdr.GetString(1)); // Populate Class from Stored Procedure } return member 我意识到编译器并不知道while循环总是会被触发,但是在不创建默认构造函数的情况下,解决这个问题的
Member member;
while (rdr.Read())
{
member = new member(rdr.GetInt32, rdr.GetString(1)); // Populate Class from Stored Procedure
}
return member
我意识到编译器并不知道while循环总是会被触发,但是在不创建默认构造函数的情况下,解决这个问题的最干净的方法是什么?问题:
while
循环之前分配成员
变量,因为编译器
无法确定是否将执行另一个循环GetInt32()
函数时,需要指定列号memebr
分配给null
GetInt32()
函数中使用必需的列索引李>
试试这个:
Member member=null;
while (rdr.Read())
{
member = new member(rdr.GetInt32(0), rdr.GetString(1)); // Populate Class from Stored Procedure
}
return 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)