【发布时间】:2016-11-18 15:31:21
【问题描述】:
在Roslyn Pattern Matching spec 中声明:
模式变量的作用域如下:
如果模式出现在 if 语句的条件中,它的范围 是 if 语句的条件和受控语句,但不是 它的 else 子句。
但是最新的微软“新功能”posts 和 presentations 显示了这个例子:
public void PrintStars(object o)
{
if (o is null) return; // constant pattern "null"
if (!(o is int i)) return; // type pattern "int i"
WriteLine(new string('*', i));
}
其中显示了在模式匹配的 if 级别范围之外使用的模式匹配 i 变量。
这是疏忽,还是规范的范围已更改?
【问题讨论】:
-
那将是 if 语句的受控语句
-
@juharr,受控语句不只会返回吗?
-
是的,我错过了。我实际上认为这可能指的是更高范围的
i,但很难说,因为它是 beta 功能的代码 sn-p。我想你可以得到预览并测试一下。 -
从您链接的文档中 - 模式引入的变量 - 类似于前面描述的 out 变量,因为它们可以在表达式中间声明,并且可以在最近的周围范围内使用。 这表明这与在 out 中声明变量的新功能类似。据我所知,这个例子在某种程度上几乎与 tryparse 相同
-
@AlfieGoodacre 我在新增功能中看到了这一行,但它似乎与规范文档相矛盾。
标签: c# pattern-matching c#-7.0