我正在使用Visual Studio 2017 RC并且我已经安装了System.ValueTuple
包,该包启用了新的c#7.0元组使用,但我无法在这种特定情况下使其工作:
正如你所看到的,第一种方法没有任何红色波浪形,它只是起作用。但尝试o is (string, Color)
失败并出现无关错误:
新元组不能以这种方式使用吗?或者它只是包的当前状态?我已将其更新为最新版本的btw,此时为4.3.0。我已阅读但未找到任何此类用法。
答案 0 :(得分:10)
Roslyn contains tests that ensure using tuples in pattern matching does cause errors(在this PR中添加,但没有解释任何内容),所以这似乎是目前预期的行为。我不确定是什么原因,或者是否计划将C#7.0的最终版本表现得像这样。这当然是我希望工作的东西。
答案 1 :(得分:7)
从C#7版本中删除了一些模式匹配功能。这包括元组的模式匹配。这被拉出并放入未来的分支机构。 (https://github.com/dotnet/roslyn/issues/10866)
这意味着更多高级的模式匹配,由reddit poster wreckedadvent有效解释,将不会在C#7中提供,包括:
- 递归模式形式,例如位置模式(例如,p是Person(" Mickey",*),属性模式(例如,p是Person {FirstName是" Mickey"}) ,元组模式,通配符*等
来源:https://www.infoq.com/news/2016/05/csharp7-pattern-matching-removed
UPDATE:类型测试(int, int)
可以解释为元组模式。例如,如果要进行类型测试并将结果绑定到变量。所以类型测试涉及元组模式。例如,(int x, int y)
可以是类型测试或元组模式。请参阅github上的模式匹配讨论:https://github.com/dotnet/roslyn/issues/11744