首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c# 8.0 switch表达式中的多个案例

c# 8.0 switch表达式中的多个案例
EN

Stack Overflow用户
提问于 2019-04-04 15:45:40
回答 2查看 7.2K关注 0票数 17

在传统的C#交换机中,我们有一个可以聚合多个案例的结构。如何在新的c# 8.0 switch expressions中完成此操作

具有多个case的Switch语句:

代码语言:javascript
复制
    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开关表达式示例:

代码语言:javascript
复制
var result = value switch  
{  
    1 => "Case 1",  
    2 => "Case 2",  
    3 => "Case 3",  
    4 => "Case 4",  
}; 
EN

回答 2

Stack Overflow用户

发布于 2019-08-28 14:53:19

在我看来,它应该以更干净的方式实现,但我这样做的方式是:

代码语言:javascript
复制
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计划的:

代码语言:javascript
复制
colorBand switch
    {
        Rainbow.Red or Rainbow.Orange => new RGBColor(0xFF, 0x7F, 0x00),
        _ => throw new ArgumentException(message: "invalid enum value", paramName: nameof(colorBand)),
    };
票数 17
EN

Stack Overflow用户

发布于 2020-04-29 22:03:35

这是基于@donatasj87的回答,所以主要归功于他们,但我只是想建议一种略有不同的写作方式。

代码语言:javascript
复制
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提到的新版本现在可用。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55510463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档