Синтаксис выражения switch не меняется только потому, что вы хотите их вложить, он одинаков до конца.
([expr] switch {
[case] => [expr],
})
([expr] switch {
[case] => ([expr] switch {
[case] => [expr]
}),
})
В вашем случае:
var levelType = task.PlanIDs.Contains(currentPlan.ID) switch
{
true => t.Status switch
{
TaskStatus.EXECUTING => WorkplaceAssociatedLevelTypes.Critical,
TaskStatus.WAITING => WorkplaceAssociatedLevelTypes.Warning,
_ => WorkplaceAssociatedLevelTypes.Untyped,
},
_ => WorkplaceAssociatedLevelTypes.Untyped,
};
Хотя вы, вероятно, могли бы просто использовать одно выражение переключателя с этим:
var levelType = task.Status switch
{
// cases are evaluated in the order they are given
_ when !task.PlanIDs.Contains(currentPlan.ID) => WorkplaceAssociatedLevelTypes.Untyped,
TaskStatus.EXECUTING => WorkplaceAssociatedLevelTypes.Critical,
TaskStatus.WAITING => WorkplaceAssociatedLevelTypes.Warning,
_ => WorkplaceAssociatedLevelTypes.Untyped,
};
Учитывая, что вы работаете с логическим выражением, я мог бы вместо этого использовать условное выражение:
var levelType = task.PlanIDs.Contains(currentPlan.ID)
? task.Status switch
{
TaskStatus.EXECUTING => WorkplaceAssociatedLevelTypes.Critical,
TaskStatus.WAITING => WorkplaceAssociatedLevelTypes.Warning,
_ => WorkplaceAssociatedLevelTypes.Untyped,
}
: WorkplaceAssociatedLevelTypes.Untyped;