我正在使用 Visual Studio 2017 RC,并且我已经安装了System.ValueTuple
启用新 c# 7.0 元组使用的包,但在这种特定情况下我无法使其工作:
如您所见,第一种方法没有任何红色波浪线,并且可以正常工作。但是尝试做o is (string, Color)
失败并出现不相关的错误:
不能这样使用新的元组吗?或者它只是包的当前状态?顺便说一句,我已将其更新到最新版本,目前是 4.3.0。我已阅读此 MSDN 帖子,但没有发现任何此类用法。
我正在使用 Visual Studio 2017 RC,并且我已经安装了System.ValueTuple
启用新 c# 7.0 元组使用的包,但在这种特定情况下我无法使其工作:
如您所见,第一种方法没有任何红色波浪线,并且可以正常工作。但是尝试做o is (string, Color)
失败并出现不相关的错误:
不能这样使用新的元组吗?或者它只是包的当前状态?顺便说一句,我已将其更新到最新版本,目前是 4.3.0。我已阅读此 MSDN 帖子,但没有发现任何此类用法。
Roslyn 包含确保在模式匹配中使用元组确实会导致错误的测试(在此 PR中添加,它没有解释任何内容),因此这似乎是当前预期的行为。我不确定这是什么原因,或者 C# 7.0 的最终版本是否计划这样做。这当然是我期望的工作。
从 C# 7 版本中删除了一些模式匹配功能。这包括元组的模式匹配。这被拉出并放入未来的分支中。(https://github.com/dotnet/roslyn/issues/10866)
这意味着更高级的模式匹配(由 reddit 海报 wreckedadvent 有效解释)在 C# 7 中将不可用,包括:
- 递归模式形式,例如位置模式(例如,p 是 Person("Mickey", *)、属性模式(例如,p 是 Person {FirstName is "Mickey"})、元组模式、通配符 * 等)。
来源:https ://www.infoq.com/news/2016/05/csharp7-pattern-matching-removed
更新:类型测试(int, int)
可以解释为元组模式。例如,如果您想进行类型测试并将结果绑定到变量。所以类型测试涉及到元组模式。例如(int x, int y)
可以是类型测试或元组模式。请参阅 github 上的模式匹配讨论:https ://github.com/dotnet/roslyn/issues/11744