【问题标题】:C#: non-flag enum, is there any easier way for checking enum to match one of multiple values? [duplicate]C#:非标志枚举,有没有更简单的方法来检查枚举以匹配多个值之一? [复制]
【发布时间】:2017-03-30 09:07:21
【问题描述】:

这里是示例,CommandType 是一个枚举。这是一个无标志枚举。

CommandType cmdType = CommandType.back;
if (cmdType == CommandType.back || cmdType == CommandType.forward || cmdType == CommandType.previous || cmdType == CommandType.home)
{
//do something
}

有什么方法可以简化“if”语句?

【问题讨论】:

  • 如果你不想要标志可能你想要扩展方法
  • 没有。继续使用if 并在每个|| 之前或之后转到新行。至少它会变得更具可读性。
  • FlagAttribute 产生不同的.ToString 输出,您仍然可以在没有此属性的枚举上使用.HasFlag 方法。
  • 取决于简化是什么意思。您可以执行new[] {CommandType.back, CommandType.forward, CommandType.previous, CommandType.home}.Contains(cmdType) 之类的操作,但这是否“更简单”?怀疑。

标签: c# enums


【解决方案1】:

switch 怎么样?

switch(cmdType)
{
    case CommandType.back:
    case CommandType.forward:
    case CommandType.previous:
    case CommandType.home:
       // do something 
       break;
}

【讨论】:

  • 虽然它更“美丽”(但我确实认为,尤其是在这种情况下,美丽在情人眼中),但不确定它是否更短。 ..记住最后的休息! :-)
  • 啊!一分钟太晚了;)
  • @InBetween 事实上,你添加了breakdefault :-) 完美被“刚刚好”打败:-)
  • 别担心@InBetween,我们现在有另一个答案晚了 2 分钟 :)
  • 嗯,我认为它不会编译@SelmanGenç
【解决方案2】:

您始终可以使用 switch 语句。它性能更好,可读性更好:

switch (cmdType)
{
    case CommandType.back:
    case CommandType.forward:
    case CommandType.previous:
    case CommandType.home:
        //do somehting
        break;
    default:
        //do something else
        break;
}

【讨论】:

    【解决方案3】:

    你可以使用 switch 语句

    CommandType cmdType = CommandType.home;
    
    switch(cmdType)
    {
        case CommandType.back:
        case CommandType.forward:
        case CommandType.previous:
        case CommandType.home:
            // do somethinig
            break;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      相关资源
      最近更新 更多