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