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

请考虑以下代码段:

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

相比

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

包括Foo()代码在.Net 4.6.1中成功编译,而包含Bar()代码导致Use of unassigned local variable 'comboBox'

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

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

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

但是,您看到的错误与范围无关。 这是关于明确的任务。 当模式匹配表达式为true时,明确赋予模式变量。 一元! 运算符反转assign-when-true和assign-when-false。 但是,布尔等式运算符==抛弃了assigned-when-true和assigned-when-false之间的区别。


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