Предварительно: Область соответствия переменной шаблона , но я хотел бы узнать больше о поведении присваивания.
Я провел следующий тест.
В F1Кажется, i
находится в области видимости, но не назначен, что я могу понять по F2.
Но ситуация в F3 меня действительно озадачивает, потому что это не может быть объяснено F2.
Тогда в F4 это показывает, что !
не имеет никакого эффекта в этой ситуации.
// inside a class
object o = 1;
void F0() { // normal usage
if(o is int i)
WriteLine(i);
}
void F1() {
if (o is int i)
WriteLine(i);
else
WriteLine(i); // Use of unassigned local variable 'i'
WriteLine(i); // the same as above
}
void F2() {
int i;
if (o is int) {
i = (int)o; // just for simulation because 'as' can't unbox
WriteLine(i);
}
else
WriteLine(i); // Use of unassigned local variable 'i'
WriteLine(i); // Use of unassigned local variable 'i'
}
void F3() {
if (!(o is int i))
WriteLine(i); // Use of unassigned local variable 'i'
else
WriteLine(i); // compile
WriteLine(i); // Use of unassigned local variable 'i'
}
void F4() {
_ = !(o is int i);
Console.WriteLine(i); // Use of unassigned local variable 'i'
_ = o is int i;
Console.WriteLine(i); // Use of unassigned local variable 'i'
}
Я могу только заключить, что этот синтаксис обрабатывает if
по-другому, что если if condition
верно, это будетназначить в области действия if true
, в противном случае он будет назначен в области действия if else
.
Правильно ли мое понимание? (я полагаю, не