c# - 优化多个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次。
解决方案
您可以在运行时枚举枚举的定义值;
foreach(PatternTypes value in Enum.GetValues(typeof(PatternTypes))){
if (patternsToFind.HasFlag(value)){
// ...
}
}
推荐阅读
- sql - 如何总结游标值并将该值存储在同一过程中的另一个选择语句中?
- sql - SSIS 包每月归档数据
- django - Django时区和dateTime格式显示
- xamarin - 如何从 prism xamarin 表单中的堆栈中删除页面
- wso2is - WSO2 IS - 是否有任何休息或肥皂端点,我们可以更新用户的挑战问题
- html - 图像没有响应。我已经尝试在 css 中添加 img-responsive 类和将高度设置为 auto
- php - 在第 195 行的 C:\xampp\htdocs\mgt\Master_Panel\system\core\Common.php 中找不到类“CI_GridView”
- plsql - 如何实现 PLSQL 过程重载包
- java - Tomcat 在尝试发送 HTTP 请求时崩溃并出现 java.lang.OutOfMemory 错误
- c++ - 游戏编码中如何使用二次公式?