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

时间:2018-03-27 23:28:47

标签: c# c#-7.0

请考虑以下代码段:

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而不是使用否定运算符的原因,有人可以解释为什么编译而另一个不编译?

1 个答案:

答案 0 :(得分:2)

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

请参阅Neal Gafter的回复(复制自here):

  

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

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