2017-08-08 79 views
2

我试图使用C#7型模式对一个元组类型:值元组类型模式

var lst = new List<object>(); 
lst.Add("foo"); 
lst.Add(("bar","baz")); 

foreach (var item in lst) { 
    switch (item) { 
     case string s: 
      break; 
     case (string, string) t: //Compiler error here 
      break; 
    } 
} 

但是编译器给了我以下错误:

Invalid expression term 'string' A constant value is expected

我该如何解决这个?


N.B.我知道我可以使用:

case ValueTuple<string,string> t: 

但我想知道是否有更好的语法。

回答

3

只需使用case ValueTuple<string, string> t:

当我发布这个答案时,您刚刚向您的问题添加了相同的解决方案。那么,你必须坚持使用这个解决方案,直到他们为case (,):语法添加编译器支持(不会等待,因为这是一个边缘案例)。

1

存在不同类型的模式,这些模式在C#7.0中未实现,但在patterns proposal中进行了跟踪,包括您描述的递归和位置模式。其中一些是后来的7.x版本的候选版本。