C#中如何处理多颜色枚举值的Linq筛选问题
处理多颜色枚举筛选的Linq实现
原代码仅支持单个颜色字符串的解析与筛选,要处理逗号分隔的多颜色输入,可按以下逻辑修改方法:
- 将输入字符串按逗号分割,同时去除每个颜色项的首尾空格(兼容
"red, blue"这类带空格的输入) - 批量解析分割后的字符串,筛选出能成功转为
Colors枚举的有效值 - 使用Linq的
Contains方法,一次性筛选出颜色匹配任意有效枚举值的结果
修改后的完整方法代码:
public void ColorInfo(string colorName) { // 分割输入字符串,清理每个项的空格与空值 var colorStrings = colorName.Split(',') .Select(s => s.Trim()) .Where(s => !string.IsNullOrEmpty(s)); // 批量解析为有效枚举值 var targetColors = new List<Colors>(); foreach (var s in colorStrings) { if (Enum.TryParse<Colors>(s, out var parsedColor)) { targetColors.Add(parsedColor); } } // 存在有效颜色时执行筛选 if (targetColors.Any()) { question = question.Where(at => targetColors.Contains(at.Color)); } }
关键细节说明
- 用
Trim()处理分割后的字符串,避免因输入格式问题导致解析失败 - 过滤空字符串,兼容用户输入
"red,,blue"这类带无效分隔的场景 - 用
Contains替代原有的switch分支判断,无需为每个枚举值单独编写逻辑,扩展性更强 - 先收集所有有效枚举值再执行筛选,避免多次遍历数据源
内容的提问来源于stack exchange,提问作者KrzysztofBojarczuk
相关产品推荐
相关产品推荐

