15

我正在使用 Visual Studio 2017 RC,并且我已经安装了System.ValueTuple启用新 c# 7.0 元组使用的包,但在这种特定情况下我无法使其工作:

如您所见,第一种方法没有任何红色波浪线,并且可以正常工作。但是尝试做o is (string, Color)失败并出现不相关的错误:

不能这样使用新的元组吗?或者它只是包的当前状态?顺便说一句,我已将其更新到最新版本,目前是 4.3.0。我已阅读此 MSDN 帖子,但没有发现任何此类用法。

4

2 回答 2

10

Roslyn 包含确保在模式匹配中使用元组确实会导致错误的测试(在此 PR中添加,它没有解释任何内容),因此这似乎是当前预期的行为。我不确定这是什么原因,或者 C# 7.0 的最终版本是否计划这样做。这当然是我期望的工作。

于 2016-11-27T18:56:57.467 回答
7

从 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

于 2016-11-27T19:06:27.677 回答