c# 8.0 switch 表达式中的多个案例[重复]
Posted
技术标签:
【中文标题】c# 8.0 switch 表达式中的多个案例[重复]【英文标题】:Multiple cases in c# 8.0 switch expressions [duplicate] 【发布时间】:2019-08-25 21:16:09 【问题描述】:在传统的 C# switch 中,我们有一个可以聚合多个案例的结构。如何在新的 c# 8.0 switch expressions 中完成?
多case的switch语句:
switch (value)
case 1:
case 2:
case 3:
//do some stuff
break;
case 4:
case 5:
case 6:
//do some different stuff
break;
default:
//default stuff
break;
C# 8 开关表达式示例:
var result = value switch
1 => "Case 1",
2 => "Case 2",
3 => "Case 3",
4 => "Case 4",
;
【问题讨论】:
我也找不到在=>之后添加块代码的方法,普通方法不起作用 问题是什么? C# 8 没有破坏 switch 语句。此代码按原样工作。您是在问开关 表达式 吗? 你能详细说明你真正在说什么吗?您是否有文章链接或提及“聚合多个案例”概念的内容? 他在谈论 c# 8 switch 表达式:docs.microsoft.com/en-us/dotnet/csharp/whats-new/… 我现在明白了,这个问题在 5 月份对我来说还不是很清楚。 【参考方案1】:在我看来应该以更干净的方式实现,但我这样做的方式是这样的:
private int GetValue(int val) =>
val switch
int i when new [] 1, 2, 3.Contains(i) => DoSomeStuff(),
int j when (j == 6 || j == 5 || j == 4) => DoSomeDifferentSwitch(),
_ => DefaultSwitch()
;
编辑: 这是为 C# 9 计划的:
colorBand switch
Rainbow.Red or Rainbow.Orange => new RGBColor(0xFF, 0x7F, 0x00),
_ => throw new ArgumentException(message: "invalid enum value", paramName: nameof(colorBand)),
;
【讨论】:
您已经删除了代码,但想法仍然存在。为什么不做出清晰明了的回答? 这非常糟糕效率低下 - 每次都为此分配一个列表......不理想 是的,我自己也不喜欢这种语法,但在发帖时我找不到更干净的解决方案,但我相信 MS 会实现比这更优雅的东西。 @donatasj87 您能否发布计划中的 C# 9 开关表达式增强的链接?谢谢! 我可以确认 C# 9 有第二种语法,我只是成功地使用了它。很干净!【参考方案2】:这是基于@donatasj87 的回答,所以主要归功于他们,但我只是想我会建议一种稍微不同的写作方式。
List<int> oneToThree = new List<int>() 1, 2, 3 ;
int GetValue(int val) => val switch
_ when oneToThree.Contains(val) => DoSomeStuff(),
_ when val == 4 || val == 5 || val == 6 => DoSomeDifferentSwitch(),
_ => DefaultSwitch()
;
_ when
可以认为是“else when”的意思,而_
只是“else”的意思。
这样您就不必先将val
重新定义为i
,然后再重新定义为j
,我觉得这需要更长的时间才能弄清楚它在做什么。
请注意,如果您使用 C# 9,@donatasj87 提到的新版本现在可用。
【讨论】:
所以基本上你可以在任何情况下使用_ when
使其适用于多种条件,我不知道,我不能给你足够多的支持,这正是我一直在做的寻找。以上是关于c# 8.0 switch 表达式中的多个案例[重复]的主要内容,如果未能解决你的问题,请参考以下文章