C# 错误:必须在控件离开当前方法之前分配Out参数
发送回参数时收到此错误 错误:必须在控件离开前指定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
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,我将在稍后进行验证:)哇,这看起来太糟糕了,为什么他们会选择这种设计?