2012-07-31 8 views
19

Podczas wysyłania z powrotem parametry uzyskiwanie ten błądError: Out Parametr musi być przypisany przed kontrolą opuszcza obecną metodę

Error: The Out Parametr musi być przypisany przed kontrola opuszcza obecną metodę

Code jest

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

nazywając go jako

GetPapers(web, out Id1, out Id2); 

związane z tym pytanie

Related question

+1

Out parametry muszą być przypisany wzdłuż wszystkich dróg przed kontrola opuszcza metody. Ponieważ masz instrukcję if, mogą one nie zostać przypisane. –

+3

Co chcesz wartości, jeśli 'rdr.Read()' zwraca wartość false? –

+0

@JonSkeet kod działa tylko wtedy, gdy jest coś w DB, jego jak odbiornik zdarzeń –

Odpowiedz

28

Jesteś przypisywania Id1 i Id2 wewnątrz if i kompilator nie może określić, czy zostanie ona przypisana wartość w czasie wykonywania, a więc błąd.

Można przypisać im pewną wartość domyślną przed instrukcją if. Coś jak.

Id1 = 0; 
Id2 = 0; 

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

lub określ niektóre wartości domyślne w części o stanie twojego ciała w else.

Parametrowi typu out należy przypisać pewną wartość, zanim sterowanie opuści funkcje. W twoim przypadku kompilator nie może określić, czy twoje zmienne zostaną przypisane, czy nie, ponieważ jest on przypisywany wewnątrz instrukcji if.

Patrz: 5.3 Definite assignment

w danym miejscu w kodzie wykonywalnym członka funkcji, zmienna mówi się zdecydowanie przypisane jeśli kompilator może udowodnić za pomocą analizy statycznej przepływu że zmienna została automatycznie zainicjowana lub była celem co najmniej jednego zadania .

+0

Wow, wydaje się, że jest super zepsuty, dlaczego mieliby dokonać tego wyboru projektu? – Harrichael

2

Musisz zainicjować te zmienne;

musi posiadać pewną wartość, zanim wrócił z Getpapers() metoda