在传统的C#交换机中,我们有一个可以聚合多个案例的结构。如何在新的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",
}; 发布于 2019-08-28 14:53:19
在我看来,它应该以更干净的方式实现,但我这样做的方式是:
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)),
};发布于 2020-04-29 22:03:35
这是基于@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提到的新版本现在可用。
https://stackoverflow.com/questions/55510463
复制相似问题