Error: el parámetro de salida debe asignarse antes de que el control abandone el método actual

Mientras se devuelven los parámetros, aparece este error

Error: el parámetro de salida debe asignarse antes de que el control abandone el método actual

El código es

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

llamándolo como

GetPapers(web, out Id1, out Id2);

Relacionado con esta pregunta

Pregunta relacionada

preguntado el 31 de julio de 12 a las 11:07

Los parámetros de salida deben asignarse a lo largo de todas las rutas antes de que el control abandone el método. Dado que tiene una declaración if, es posible que no se asignen. -

¿Cuáles quieres que sean los valores si rdr.Read() devuelve falso? -

El código de @JonSkeet solo funciona cuando hay algo en DB, es como un receptor de eventos:

@fdgfdgsdfg: Entonces, ¿quizás debería lanzar una excepción cuando no hay nada en la base de datos? -

@JonSkeet sí, haré las validaciones más adelante entonces :) -

2 Respuestas

Te estás asignando Id1 y Id2 dentro de una declaración if y el compilador no pueden determinar si se le asignará un valor en tiempo de ejecución, por lo tanto, el error.

Puede asignarles algún valor predeterminado antes de la declaración if. Algo como.

Id1 = 0;
Id2 = 0;

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

o especifique algunos valores predeterminados en else parte de tu condición.

An out al parámetro tipo se le debe asignar algún valor, antes de que el control abandone las funciones. En su caso, el compilador no puede determinar si sus variables se asignarán o no, porque se asignan dentro de un if .

Ver: 5.3 Asignación definida

At a given location in the executable code of a function member, a variable is said to be definitely assigned si el compilador puede probar, por análisis de flujo estático, que la variable se ha inicializado automáticamente o ha sido objeto de al menos una asignación.

Respondido 11 Feb 15, 13:02

Wow, esto parece súper roto, ¿por qué elegirían este diseño? - harrichael

Necesita inicializar esas variables;

it must hold some value before returned from the Getpapers() method

Respondido 31 Jul 12, 12:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.