我试图在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:
但我想知道是否有更好的语法。
答案 0 :(得分:4)
只需使用case ValueTuple<string, string> t:
。
在我发布此答案时,您刚刚在问题中添加了相同的解决方案。好吧,你必须坚持使用这个解决方案,直到他们为case (,):
语法添加编译器支持(不会等待,因为这是一个边缘情况)。
答案 1 :(得分:1)
C#7.0中没有实现不同类型的模式,但是在patterns proposal中进行了跟踪,包括您描述的递归和位置模式。其中一些是后来的7.x版本的候选者。