【发布时间】:2019-03-16 13:42:51
【问题描述】:
前:Pattern match variable scope,但我想了解更多关于分配行为的信息。
我做了以下测试。
在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 的范围内分配。
我的理解正确吗?(我猜不是
【问题讨论】: