2015-12-18 35 views
6

Con questo codice:Qual è il motivo dell'errore "Uso della variabile locale non assegnata"?

bool dataToAdd; 
if (null == _priceComplianceDetailList) return dataToAdd; 

mi è stato sempre un errore di compilazione, "L'uso della variabile locale non assegnata 'dataToAdd'"

così ho dovuto assegnare esplicitamente "false" al bool:

bool dataToAdd = false; 
if (null == _priceComplianceDetailList) return dataToAdd; 

Nel contesto:

private bool PopulateSheetWithDetailData() 
{ 
    bool dataToAdd = false; 
    if (null == _priceComplianceDetailList) return dataToAdd; 
    List<PriceComplianceDetail> _sortedDetailList = 
    . . . 
    return _sortedDetailList.Count > 0; 
} 

Perché è necessario? I bool non hanno un valore predefinito di false?

+4

Il valore predefinito si applica solo ai membri della classe, le variabili locali nei metodi devono essere assegnate in modo esplicito. – Lee

+1

Inoltre è possibile rimuovere completamente la variabile poiché si sta ritornando in base al conteggio dell'elenco e nel primo blocco se è possibile restituire direttamente false. –

risposta

11

Poiché le variabili locali non sono inizializzate per impostazione predefinita. Dovresti inizializzarli esplicitamente. È una funzione del compilatore per evitare errori futuri. È chiarito nelle specifiche linguistiche here e here.

Il motivo di questo è illegale in C# è perché non assegnato utilizzando un locale ha alta probabilità di essere un bug

Se volete sapere il motivo di questa decisione vedi here.

+1

Rilevante anche [sezione 5.1.7] (https://msdn.microsoft.com/en-us/library/aa691170 (v = vs.71) .aspx). Nello specifico: "Una variabile locale introdotta da una _local-variable-declaration_ non viene inizializzata automaticamente e quindi non ha alcun valore predefinito." –

+0

Aggiunto alla risposta, Grazie @JoeFarrell, – dotctor