30

パラメータを送り返している間、このエラーが発生します

エラー:制御が現在のメソッドを離れる前に、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);

この質問に関連する

関連する質問

4

2 に答える 2

36

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

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

Id1 = 0;
Id2 = 0;

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

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

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

参照:5.3明確な割り当て

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

于 2012-07-31T10:27:16.670 に答える
3

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

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

于 2012-07-31T11:26:48.850 に答える