Рассмотрим следующие фрагменты:
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
вместо оператора отрицания, может кто-то объяснить, почему один компилируется, а другой нет?