5

Ben bu kod parçası yazdı:.NET Reflector, boş birleştirme işlecini doğru olarak yansıtmıyor mu?

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

ve reflektör bana verir:

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

Açıkçası, bu orijinal kod ne diyor değil. (this._queue = new Queue<int>(10)); hattı, null değilse _queue yerine new Queue<int>(10) döndürecektir.

Bu hata, .NET Reflector veya bir hata mı eksik? Program

DÜZENLEME ... doğru davrandığı görülmektedir ->

+0

The ?? operatör sözdizimsel şekerdir, derleyicinin onu çevirdiğini görüyorsunuz. –

+0

@RonBeyer Ancak çıktı doğru değil, değil mi? – HerpDerpington

+3

İşlenmemiş IL'ı gönderir misiniz? Reflektörün tercüme etmeye çalıştığını gördüyseniz, muhtemelen daha açık olacaktır. Genellikle JetBrains DotPeek'in Redgate'den biraz daha doğru olduğunu ve Reflector'u ücretsiz tutmaya söz verdikten sonra Redgate'i kullanmaya karşı olduğumu, bunun için de aşırı bir şekilde şarj olmaya başladığını görüyorum. DotPeek ücretsizdir. –

cevap

3

Bu Reflektör kopyam bu yöntemin kılan benim cevap bakınız:

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

oldukça lanetlemek iyi görünüyor ben mi. 8.5.0.179 Sürümü, sizinkileri güncellediğinizden emin olun.

+0

Ben aslında aynı sürümü var: 8.5.0.179 (Deneme '??? !!!' (Bu sorunun kaynağı değildir umarım)) – HerpDerpington

+0

Bu çok olası değil. Belki daha iyi bir snippet göndermelisiniz, _queue değişkeninde tahmin etmeliydim. –

+0

Reflektör için, C# versiyonu, derleyici sürümü, belirli yapıların nasıl derlenmesi vb. Gibi seçenekler var mı? –

İlgili konular