如果我有一个if语句,类似于
对于有穿透的switch语句也是如此。
if (currentShape is ITable table || currentShape is AutoShape autoShape)
,我不能在语句块中使用table
或者autoShape
因为我会得到一个CS0165编译器错误。对于有穿透的switch语句也是如此。
void Foo(object o)
{
switch (o)
{
case int i:
case string s:
case Guid g:
string bar = i?.ToString() ?? s?.ToString() ?? g.ToString(); // cannot use i, s, or g.
break;
}
}
我明白为什么会这样,但我想知道,这是模式匹配的限制吗?即,您不能在复合if
语句中使用它,还是有一种正确的构造语句的方法,可以使用任何一个变量(例如通过将它们初始化为null,以便至少进行空检查)?