c# - 使用从存储过程创建的未分配的局部变量(对象)

标签 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 循环总是会被触发,但是在不创建默认构造函数的情况下解决这个问题的最干净的方法是什么?

最佳答案

编译器无法确定您的条件 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)

关于c# - 使用从存储过程创建的未分配的局部变量(对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20546159/

相关文章:

c# - 为 Task<T> 返回默认值或 null

c# - 将 ExceptionFilterAttribute 限制到一个特定的 MVC 区域

c# - 在 ulong (C#) 中获得最后一个有效位的最快方法?

mysql - 无法在mysql中创建存储过程

c# - ASP.NET 中存储过程的使用

MySQL:如果存储过程中的选定字段具有 NULL 值,我想返回 N/A 作为值

c# - 对象类型的转换

c# - 基于 token 的身份验证和哈希密码

c# - c#中存储过程中的await关键字放在哪里

stored-procedures - 如何从 DB2 上的 COBOL 存储过程调用 COBOL 批处理程序