Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误:必须在控件离开当前方法之前分配Out参数_C#_Compiler Errors_.net 2.0 - Fatal编程技术网

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

C# 错误:必须在控件离开当前方法之前分配Out参数,c#,compiler-errors,.net-2.0,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", c

发送回参数时收到此错误

错误:必须在控件离开前指定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);
关于这个问题


您正在if语句中赋值
Id1
Id2
,编译器无法确定在运行时是否会给它赋值,因此会出现错误

可以在if语句之前为它们指定一些默认值。差不多

Id1 = 0;
Id2 = 0;

if (rdr.Read())
{
    Id1 = (int)rdr["ID1"];
    Id2 = (int)rdr["ID2"];
}
或者在条件的
部分中指定一些默认值

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

见:

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


你需要初始化这些变量


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

Out参数必须在控件离开该方法之前沿所有路径分配。由于您有一个if语句,它们可能不会被赋值。如果
rdr.Read()
返回false,您希望值是什么?@JonSkeet code仅在DB中有某些内容时才起作用,就像事件一样receiver@fdgfdgsdfg:那么,当数据库中没有任何内容时,也许你应该抛出一个异常?@JonSkeet-yes,我将在稍后进行验证:)哇,这看起来太糟糕了,为什么他们会选择这种设计?