如何基于布尔值简化属性赋值代码以减少冗余?
简化基于布尔值设置对象属性的代码
当然有更简洁的方式来处理这种场景!你当前的代码里重复了foreach逻辑和一堆else if分支,我们可以通过条件与赋值操作的映射关系来消除冗余,同时让代码更易维护。
核心思路
把每个布尔条件和对应的属性赋值逻辑打包成一组,然后遍历这组映射,找到第一个满足条件的项,一次性完成所有items的属性赋值。这样既避免了重复的foreach,也让新增条件/属性的操作变得更简单。
简化后的代码示例
假设你的Item类包含B、C、E等属性,我们可以这样改写:
if (a) { // 定义条件与赋值操作的映射列表,按优先级排序 var propertyAssignments = new List<(bool Condition, Action<Item> AssignAction)> { (b, item => item.B = B), (c, item => item.C = C), // 这里可以继续添加其他条件和对应的赋值逻辑,比如d、e... (e, item => item.E = E) }; // 找到第一个满足条件的赋值操作 var matchingAssignment = propertyAssignments.FirstOrDefault(p => p.Condition); if (matchingAssignment.AssignAction != null) { foreach (var item in items) { matchingAssignment.AssignAction(item); } } }
为什么这样更好?
- 消除冗余:只写一次
foreach,不用在每个分支里重复编写遍历逻辑 - 扩展性强:如果后续要添加新的属性(比如
D),只需要在propertyAssignments里新增一行即可,不用修改原有分支结构 - 可读性更高:所有条件和对应的操作一目了然,逻辑结构更清晰
如果你的C#版本不支持值元组(比如低于C# 7.0),可以用KeyValuePair<bool, Action<Item>>或者自定义一个简单的类来替代,核心逻辑是完全一致的。
内容的提问来源于stack exchange,提问作者Anish
相关产品推荐
相关产品推荐

