Ich schrieb dieses Stück Code:Kann .NET Reflector den Nullkoaleszenzoperator nicht korrekt wiedergeben?
private Queue<int> EnsureQueue()
{
return _queue ?? (_queue = new Queue<int>(10));
}
und der Reflektor gibt mir:
private Queue<int> EnsureQueue()
{
if (this._queue == null)
{
}
return (this._queue = new Queue<int>(10));
}
Offensichtlich ist dies nicht das, was der ursprüngliche Code sagt. Die Zeile (this._queue = new Queue<int>(10));
wird immer eine new Queue<int>(10)
anstelle von _queue
zurückgeben, wenn es nicht null
ist.
Ist das ein Fehler in der .NET Reflector
oder fehle ich etwas? Das Programm scheint richtig zu verhalten ...
EDIT -> Siehe meine Antwort
Die ?? Der Operator ist syntaktischer Zucker, Sie sehen, in was der Compiler ihn übersetzt. –
@RonBeyer Aber die Ausgabe ist nicht korrekt, oder? – HerpDerpington
Können Sie die rohe IL veröffentlichen? Es wäre wahrscheinlich viel klarer, wenn Sie sehen würden, von was der Reflektor zu übersetzen versucht. Normalerweise finde ich, dass JetBrains DotPeek etwas genauer ist als Redgates, und ich bin dagegen, Redgate zu benutzen, nachdem sie "versprochen" haben, Reflector frei zu halten, und dann unverschämt damit angefangen haben. DotPeek ist kostenlos. –