C# 7 模式匹配与元组

C# 7 Pattern Match with a tuple

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

请记住,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;
}