错误:必须在控制离开当前方法之前分配Out参数

时间:2012-07-31 10:26:04

标签: c# compiler-errors .net-2.0

发回参数时收到此错误

  

错误:必须在控制离开之前分配Out参数   现行方法

代码是

 public void GetPapers(string web, out int Id1, out int Id2)
    {
        SqlConnection conn = new SqlConnection(ConnectionString());
        conn.Open();
        SqlCommand cmd = new SqlCommand("GetPapers", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Add(new SqlParameter("@URL", String(web)));

        SqlDataReader rdr = cmd.ExecuteReader();

        if (rdr.Read())
        {
            Id1 = (int)rdr["ID1"];
            Id2 = (int)rdr["ID2"];
        }

        rdr.Close();
    }

将其称为

GetPapers(web, out Id1, out Id2);

与此问题相关

Related question

2 个答案:

答案 0 :(得分:30)

您正在if语句中分配Id1Id2,并且编译器无法确定是否在运行时为其分配值,从而导致错误。

您可以在if语句之前为它们分配一些默认值。就像是。

Id1 = 0;
Id2 = 0;

if (rdr.Read())
{
    Id1 = (int)rdr["ID1"];
    Id2 = (int)rdr["ID2"];
}

或在else部分条件中指定一些默认值。

在控件离开函数之前,必须为out类型参数指定一些值。在您的情况下,编译器无法确定是否将分配您的变量,因为它是在if语句中分配的。

请参阅:5.3 Definite assignment

  

在函数成员的可执行代码中的给定位置,a   如果编译器可以,变量被称为明确赋值   通过静态流量分析证明变量已经存在   自动初始化或已成为至少一个目标   分配

答案 1 :(得分:2)

您需要初始化这些变量;

在从Getpapers()方法返回之前它必须保留一些值