5

Ho scritto questo pezzo di codice:.NET Reflector non è in grado di riflettere correttamente sull'operatore a coalescenza nulla?

private Queue<int> EnsureQueue() 
{ 
    return _queue ?? (_queue = new Queue<int>(10)); 
} 

e il riflettore mi dà:

private Queue<int> EnsureQueue() 
{ 
    if (this._queue == null) 
    { 
    } 
    return (this._queue = new Queue<int>(10)); 
} 

Ovviamente, questo non è ciò che dice il codice originale. La riga (this._queue = new Queue<int>(10)); restituirà sempre un new Queue<int>(10) anziché _queue quando non è null.

Si tratta di un bug nel .NET Reflector o mi manca qualcosa? Il programma sembra comportarsi in modo corretto ...

EDIT -> Vedere la mia risposta

+0

Il ?? l'operatore è zucchero sintattico, stai vedendo in che cosa lo sta traducendo il compilatore. –

+0

@RonBeyer Ma l'output non è corretto, vero? – HerpDerpington

+3

Puoi pubblicare l'IL grezzo? Probabilmente sarebbe molto più chiaro se vedessi da cosa stava cercando di tradurre il riflettore. Di solito trovo che JetBrains DotPeek sia un po 'più preciso di quello di Redgate, e sono contraria all'utilizzo di Redgate dopo che "hanno promesso" di mantenere Reflector libero, quindi ha iniziato a caricarsi in modo oltraggioso per questo. DotPeek è gratuito. –

risposta

3

Questo è ciò che la mia copia del riflettore fa di questo metodo:

private Queue<int> EnsureQueue() 
{ 
    return (this._queue ?? (this._queue = new Queue<int>(10))); 
} 

Sembra maledettamente bene me. Versione 8.5.0.179, assicurati di aggiornare il tuo.

+0

In realtà ho la stessa versione: 8.5.0.179 (Prova '??? !!!' (spero che questa non sia la fonte del problema)) – HerpDerpington

+0

Questo è molto improbabile. Forse dovresti pubblicare un frammento migliore, ho dovuto indovinare la variabile _queue. –

+0

Esistono opzioni per Reflector, come la versione C#, la versione del compilatore, come decompilare determinati costrutti, ecc.? –

Problemi correlati