2014-07-15 16 views
6

Sto provando a contare il numero totale di file in tutte le sottocartelle di un determinato percorso. Sto usando una chiamata di funzione ricorsiva. Quale potrebbe essere la ragione?Come risolvere l'errore di parametro 'out' non assegnato?

Codice:

int iCount =0; 
getFileCount(_dirPath, out iCount); 

private void getFileCount(string _path, out int iCount) 
{   
    try 
    { 
     // gives error :Use of unassigned out parameter 'iCount' RED Underline 
     iCount += Directory.GetFiles(_path).Length; 

     foreach (string _dirPath in Directory.GetDirectories(_path)) 
      getFileCount(_dirPath, out iCount); 
    } 
    catch { } 
} 
+0

hanno dichiarato iCount in main/global? –

+1

Perché non si può rendere il metodo valore di ritorno invece di passarlo come fuori? Qual è il messaggio che hai ricevuto? Inoltre, è necessario calcolare zero nella parte superiore della ricorsione (ad es. Con 0). –

+0

aggiornato, ho dimenticato di scrivere in questione, ho assegnato zero per contare la variabile –

risposta

11

Volete un parametro ref non un parametro out quanto si sta accettando sia il valore e l'impostazione di un nuovo valore.

int iCount = 0; 
getFileCount(_dirPath, ref iCount); 

private void getFileCount(string _path, ref int iCount) 
{   
    try 
    { 
     // gives error :Use of unassigned out parameter 'iCount' RED Underline 
     iCount += Directory.GetFiles(_path).Length; 

     foreach (string _dirPath in Directory.GetDirectories(_path)) 
      getFileCount(_dirPath, ref iCount); 
    } 
    catch { } 
} 

ancora meglio, non utilizzare affatto i parametri.

private int getFileCount(string _path) { 
    int count = Directory.GetFiles(_path).Length; 
    foreach (string subdir in Directory.GetDirectories(_path)) 
     count += getFileCount(subdir); 

    return count; 
}  

e anche di meglio, non creare una funzione per fare qualcosa che il quadro sia già costruito nel ..

int count = Directory.GetFiles(path, "*", SearchOption.AllDirectories).Length 

e non abbiamo ancora finito sempre meglio ... don' t sprecare spazio e cicli creando una serie di file quando tutto ciò che serve è una lunghezza. Enumerarli invece.

int count = Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories).Count(); 
+0

Grazie per la risposta, ho provato la funzione Ref, ma mi dà errore nella chiamata di funzione, inoltre non devo usare alcuna funzione incorporata. –

+0

Quando si cambia la funzione in 'ref', si anche bisogno di cambiare la chiamata a 'ref' e necessità di inizializzare la variabile prima della chiamata. –

+0

dice "Il metodo deve avere tipo di ritorno" su getFileCount (_dirPath, ref iCount); –

0

I parametri che vengono passati come fuori devono essere inizializzati all'interno della funzione. Poiché iCount non è ancora inizializzato, il valore non è noto e non è da dove iniziare, anche se è un numero intero i cui valori predefiniti è 0.

Si consiglia di non associare il parametro out con una funzione ricorsiva. Invece sarebbe possibile utilizzare un parametro di ritorno regolare. La stessa Microsoft suggerisce attraverso alcune regole di analisi statica to avoid out parameters if possible.

Problemi correlati