2012-07-31 7 views
19

Durante l'invio di nuovo i parametri di questo erroreErrore: il parametro OUT deve essere assegnato prima che il controllo lascia l'attuale metodo

Errore: il parametro OUT deve essere assegnato prima che il controllo lascia il metodo corrente

Codice è

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

definendolo come

012.351.
GetPapers(web, out Id1, out Id2); 

correlati a questa domanda

Related question

+1

Out parametri devono essere assegnati lungo tutti i percorsi prima che il controllo lascia il metodo. Dato che hai una dichiarazione if, potrebbero non essere assegnati. –

+3

Cosa vuoi che i valori siano se 'rdr.Read()' restituisce false? –

+0

Il codice @JonSkeet funziona solo quando c'è qualcosa nel DB, è come un ricevitore di eventi –

risposta

28

si sta assegnando Id1 e Id2 all'interno di un if e compilatore non in grado di determinare se verrà assegnato un valore in fase di esecuzione, così l'errore.

È possibile assegnare loro un valore predefinito prima dell'istruzione if. Qualcosa di simile a.

Id1 = 0; 
Id2 = 0; 

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

o specificare alcuni valori predefiniti nella parte else della condizione.

A un parametro di tipo out deve essere assegnato un valore, prima che il controllo lasci le funzioni. Nel tuo caso, il compilatore non può determinare se le tue variabili saranno assegnate o meno, perché viene assegnato all'interno di un'istruzione if.

Vedi: 5.3 Definite assignment

in una data posizione nel codice eseguibile di un membro di funzione, una variabile è detto essere definitivamente assegnato se il compilatore può dimostrare, mediante analisi del flusso statica, che la variabile è stata inizializzata automaticamente o è stata l'obiettivo di almeno un incarico .

+0

Wow, questo sembra super rotto, perché dovrebbero fare questa scelta di design? – Harrichael

2

È necessario inizializzare tali variabili;

occorre tenere alcune valore prima restituito dai Getpapers() metodo

Problemi correlati