C# .NET反射器是否无法正确反映空合并运算符?

C# .NET反射器是否无法正确反映空合并运算符?,c#,null-coalescing-operator,.net-reflector,null-coalescing,C#,Null Coalescing Operator,.net Reflector,Null Coalescing,我写了这段代码: private Queue<int> EnsureQueue() { return _queue ?? (_queue = new Queue<int>(10)); } 专用队列EnsureQueue() { 返回_队列??(_队列=新队列(10)); } 反射器给了我: private Queue<int> EnsureQueue() { if (this._queue == null) { }

我写了这段代码:

private Queue<int> EnsureQueue()
{
    return _queue ?? (_queue = new Queue<int>(10));
}
专用队列EnsureQueue()
{
返回_队列??(_队列=新队列(10));
}
反射器给了我:

private Queue<int> EnsureQueue()
{
    if (this._queue == null)
    {
    }
    return (this._queue = new Queue<int>(10));
}
专用队列EnsureQueue()
{
if(this.\u queue==null)
{
}
返回(此队列=新队列(10));
}
显然,这不是原始代码所说的。行
(此._队列=新队列(10))null
时,code>将始终返回
新队列(10)
,而不是
\u队列

这是
.NET Reflector
中的一个bug还是我遗漏了什么?程序似乎运行正常

编辑
->请参阅我的答案,这是我的反射镜副本使用此方法制作的:

private Queue<int> EnsureQueue()
{
    return (this._queue ?? (this._queue = new Queue<int>(10)));
}
专用队列EnsureQueue()
{
返回(此._队列???(此._队列=新队列(10));
}

我觉得很不错。版本8.5.0.179,请务必更新您的版本。

??运算符是语法糖,您可以看到编译器将其翻译成什么。@RonBeyer,但输出不正确,是吗?您可以发布原始IL吗?如果你看到反射器试图从中转换过来的东西,可能会清楚得多。通常我发现JetBrains DotPeek比Redgate的更精确一点,我反对使用Redgate,因为他们“承诺”不使用反射器,然后开始为此收费。DotPeek是免费的。ILSpy是一个非常棒的免费反射镜克隆。它甚至还有一个Reflexil插件端口,可以让您编辑程序集的IL。@M.kazemAkhgary
??
之后的部分只有在前面的部分为
null
时才会执行。实际上,我有相同的版本:8.5.0.179(试用版
??!
(我希望这不是问题的根源)),这不太可能。也许你应该发布一个更好的代码片段,我不得不猜测#u queue变量。Reflector有什么选项,比如C版本、编译器版本、如何反编译某些结构等。?