web-dev-qa-db-ja.com

エラー:コントロールが現在のメソッドを終了する前に、出力パラメーターを割り当てる必要があります

このエラーを取得してパラメーターを送り返している間

エラー:コントロールが現在のメソッドを終了する前に、出力パラメーターを割り当てる必要があります

コードは

 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);

この質問に関連

関連する質問

24
fdgfdgs dfg

Ifステートメント内でId1およびId2を割り当てているため、実行時に値が割り当てられるかどうかをコンパイラーが判断できないため、エラーが発生します。

Ifステートメントの前にデフォルト値を割り当てることができます。何かのようなもの。

Id1 = 0;
Id2 = 0;

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

または、条件のelse部分にデフォルト値を指定します。

コントロールが関数から出る前に、out型パラメーターに何らかの値を割り当てる必要があります。あなたの場合、コンパイラはifステートメント内で変数が割り当てられているため、変数が割り当てられるかどうかを判断できません。

参照: 5.3明確な割り当て

関数メンバーの実行可能コード内の特定の場所では、コンパイラーが静的フロー解析によって証明できる場合、変数は明確に割り当てられていると言われます変数が自動的に初期化されたか、少なくとも1つの割り当てのターゲットになったこと。

32
Habib

これらの変数を初期化する必要があります。

getpapers()メソッドから返される前に何らかの値を保持する必要があります

3
Dhanasekar