是否可以在使用c#7的switch语句中使用模式匹配的元组,如下所示:
switch (parameter)
{
case ((object, object)) tObj when tObj.Item1 == "ABC":
break;
}
我收到错误消息tObj does not exist in the current context
。
我也试过这个:
switch (parameter)
{
case (object, object) tObj when tObj.Item1 == "ABC":
break;
}
这很好用:
switch (parameter)
{
case MachineModel model when model.Id == "123":
break;
}
答案 0 :(得分:17)
请记住,C#7元组只是语法糖,所以(object, object)
实际上只是System.ValueTuple<object, object>
。
我猜开发团队没有考虑到元组的新语法这种特殊情况,但你可以这样做:
switch (parameter)
{
case System.ValueTuple<object, object> tObj when tObj.Item1 == "x":
break;
}
此外,由于“var pattern”将匹配任何内容并尊重类型,因此上述内容可简化为:
switch (parameter)
{
case var tObj when tObj.Item1 == "x":
break;
}