C#7模式与元组匹配

时间:2017-06-22 18:03:33

标签: c# switch-statement pattern-matching c#-7.0

是否可以在使用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;
}

1 个答案:

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