首页 > 解决方案 > 优化多个if条件进行flag检查

问题描述

[Flags]
public enum PatternTypes
{
  A = 1,
  B = 2,
  C = 4,
  D = 8,
  E = 16,
  F = 32,
  G = 64
}

patternsToFind[这是PatternTypes]:它包含标志值来查找模式的数量,这样A | B | E会在列表中返回我们A, B and E的模式结果

if patternsToFind.HasFlag(A) {call patternA() and add result to list}
if patternsToFind.HasFlag(B) {call patternB() and add result to list}
if patternsToFind.HasFlag(C) {call patternC() and add result to list}
if patternsToFind.HasFlag(D) {call patternD() and add result to list}
if patternsToFind.HasFlag(E) {call patternE() and add result to list}

像这样,我有 20 个模式,那么我应该用什么来优化它?替代多个 if 条件。要么我必须写20次。

标签: c#if-statementoptimization

解决方案


您可以在运行时枚举枚举的定义值;

   foreach(PatternTypes value in Enum.GetValues(typeof(PatternTypes))){
       if (patternsToFind.HasFlag(value)){
           // ...
       }
   }

推荐阅读