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

时间:2016-11-27 18:28:49

标签: c# tuples visual-studio-2017 c#-7.0

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

np.put

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

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

2 个答案:

答案 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