使用'== false'而不是否定运算符时,内联变量声明不会编译

bra*_*olt 11 c# c#-7.0

请考虑以下代码段:

void Foo(object sender, EventArgs e)
{
    if (!(sender is ComboBox comboBox)) return;
    comboBox.DropDownWidth = 100;
}
Run Code Online (Sandbox Code Playgroud)

相比

void Bar(object sender, EventArgs e)
{
    if ((sender is ComboBox comboBox) == false) return;
    comboBox.DropDownWidth = 100;
}
Run Code Online (Sandbox Code Playgroud)

代码包括Foo()成功编译.Net 4.6.1,而代码包括Bar()结果Use of unassigned local variable 'comboBox'.

在没有讨论使用== false而不是使用否定运算符的原因的辩论中,有人可以解释为什么编译而另一个不编译?

Mic*_*ton 2

更新的答案感谢Julien打开了 GitHub 问题。

请参阅 Neal Gafter 的回复(从此处复制):

但是,您看到的错误与范围无关。这是关于明确的任务。当模式匹配表达式为 true 时,模式变量肯定会被赋值。一元 ! 运算符反转“真时分配”和“假时分配”。但是,布尔相等运算符 == 抛弃了signed-when-true 和signed-when-false 之间的区别。


我相信只有当模式匹配时comboBox才会创建变量。