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