值元组类型模式

时间:2017-08-08 18:05:24

标签: c# c#-7.0 valuetuple

我试图在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;
    }
}

但编译器给出了以下错误:

  

无效的表达式词组&#39; string&#39;   预期值为常数

我该如何解决这个问题?

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

case ValueTuple<string,string> t:

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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