请考虑以下代码段:
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而不是使用否定运算符的原因的辩论中,有人可以解释为什么编译而另一个不编译?
更新的答案感谢Julien打开了 GitHub 问题。
但是,您看到的错误与范围无关。这是关于明确的任务。当模式匹配表达式为 true 时,模式变量肯定会被赋值。一元 ! 运算符反转“真时分配”和“假时分配”。但是,布尔相等运算符 == 抛弃了signed-when-true 和signed-when-false 之间的区别。
我相信只有当模式匹配时comboBox才会创建变量。
| 归档时间: |
|
| 查看次数: |
374 次 |
| 最近记录: |