2016-02-12 37 views
7

sto affrontando questo piccolo pezzo di codice:#if DEBUG e ritorno dichiarazioni - codice irraggiungibile avvertimento

#if DEBUG 
return thisVariable; 
#endif 
return thatVariable; //<-- warning CS0162 here 

Funziona bene, tranne che sto ottenendo un avvertimento sulla seconda istruzione return che il codice non è raggiungibile. Nonostante l'avviso, il codice è in realtà molto raggiungibile quando si esegue il programma in modalità di rilascio.

Perché ricevo questo avviso?

+0

In quale configurazione di soluzione si dispone di Visual Studio al momento? – Maarten

+0

Questo andrà via quando lo metti in rilascio –

+4

Aggiungi un #else prima del 2 ° return e #endif dopo –

risposta

13

Se si sta eseguendo una build in cui è definito il simbolo DEBUG, il compilatore sta eseguendo l'analisi statica del codice presumendo che il primo ritorno è in vigore e non escluso. Quindi, il codice sarebbe visto come:

return thisVariable; 
return thatVariable; 

In tale contesto è evidente il secondo return dichiarazione non sarà raggiunto in un tale accumulo. Quando si passa a una configurazione di build in cui DEBUG non è definito, non si dovrebbe vedere l'avviso.

Considerare l'utilizzo di #else (docs) per evitare la seconda istruzione return quando DEBUG è definito.

C'è anche questo bocconcino rilevanti da here:

Anche se il compilatore non dispone di un preprocessore separata, i direttive descritte in questa sezione [C# direttive del preprocessore] sono trattati come se ci fosse uno.

In altre parole, l'analisi statica del compilatore C# non è a conoscenza delle direttive del preprocessore; sono già stati elaborati a quel punto e l'analisi statica vede solo il codice che ha generato dalla fase di pre-elaborazione.

+1

Grazie! usando #else per la seconda dichiarazione di ritorno e ponendo il #endif sotto di esso rimosso l'avviso. – Richnau