"if(object is(string,Color))"c#7.0元组用法不起作用

use*_*322 15 c# tuples c#-7.0 visual-studio-2017

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

正如你所看到的,第一种方法没有任何红色波浪形,它只是起作用.但尝试做的o is (string, Color)失败与无关的错误:

新元组不能以这种方式使用吗?或者它只是包的当前状态?我已将其更新为最新版本的btw,此时为4.3.0.我已阅读此MSDN帖子,但没有找到任何此类用法.

svi*_*ick 10

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


Mar*_*Put 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

更新:类型测试(int, int)可以解释为元组模式.例如,如果要进行类型测试并将结果绑定到变量.所以类型测试涉及元组模式.例如,(int x, int y)可以是类型测试或元组模式.请参阅github上的模式匹配讨论:https://github.com/dotnet/roslyn/issues/11744