Подтвердить что ты не робот

Ошибка: параметр Out должен быть назначен до того, как элемент управления покинет текущий метод

При отправке параметров, получающих эту ошибку

Ошибка: параметр 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);

В связи с этим вопросом

Связанный с нами вопрос

4b9b3361

Ответ 1

Вы назначаете Id1 и Id2 внутри оператора if, и компилятор не может определить, будет ли оно присвоено значение во время выполнения, таким образом, ошибка.

Вы можете присвоить им значение по умолчанию перед оператором if. Что-то вроде.

Id1 = 0;
Id2 = 0;

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

или укажите некоторые значения по умолчанию в else части вашего условия.

Параметру типа out должно быть присвоено некоторое значение, прежде чем элемент управления покинет функции. В вашем случае компилятор не может определить, будут ли назначены ваши переменные или нет, потому что он назначается внутри оператора if.

Смотрите: 5.3 Определенное назначение

В заданном месте в исполняемом коде члена функции переменная, как говорят, определенно назначается , если компилятор может докажите, с помощью статического анализа потока, что переменная была автоматически инициализируется или была целью хотя бы одного назначение.

Ответ 2

Вам нужно инициализировать эти переменные;

он должен содержать некоторое значение перед возвратом из метода Getpapers()