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;
    }
}

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

无效的表达式术语“字符串”需要一个常量值

我该如何解决这个问题?


注意我知道我可以使用:

case ValueTuple<string,string> t:

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

4

2 回答 2

4

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

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

于 2017-08-08T18:09:02.153 回答
1

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

于 2017-08-27T07:01:46.563 回答