如何用最简代码向List中添加不存在的ModifiedProperty对象?
更简洁的实现方式推荐
当然可以!你的原有逻辑已经很清晰,但我们可以通过C#的语法特性或封装技巧,让代码更紧凑易读,甚至提升复用性。这里有几种实用方案供你选择:
1. 简化现有逻辑的紧凑写法
利用空合并运算符(??)减少冗余的null判断,让变量赋值更简洁:
List<ModifiedProperty> modifiedProperties = new List<ModifiedProperty>(); var modifiedProperty = modifiedProperties.FirstOrDefault(e => e.PropertyName == "PropertyName") ?? new ModifiedProperty { PropertyName = "PropertyName" }; // 仅当对象是新创建时,才添加到列表 if (!modifiedProperties.Contains(modifiedProperty)) { modifiedProperties.Add(modifiedProperty); } modifiedProperty.OldValue = "Test";
2. 封装扩展方法(推荐,复用性拉满)
如果你的代码中经常需要做「查找不存在则添加」的操作,封装一个通用扩展方法是最优解,后续调用只需一行代码:
// 先定义扩展方法 public static class ListExtensions { public static T GetOrAdd<T>(this List<T> list, Func<T, bool> matchCondition, Func<T> createNewItem) { var existingItem = list.FirstOrDefault(matchCondition); if (existingItem == null) { existingItem = createNewItem(); list.Add(existingItem); } return existingItem; } } // 使用时的代码 var modifiedProperty = modifiedProperties.GetOrAdd( e => e.PropertyName == "PropertyName", () => new ModifiedProperty { PropertyName = "PropertyName" }); modifiedProperty.OldValue = "Test";
这个方案的优势在于一次封装,多处复用,而且代码可读性极强,一眼就能明白是「获取或添加」的逻辑。
3. 用字典替代列表(性能优化版)
如果你的核心需求是通过PropertyName快速查找/操作对象,直接使用Dictionary<string, ModifiedProperty>会更高效(字典查找时间复杂度为O(1),而List是O(n)):
Dictionary<string, ModifiedProperty> modifiedPropertiesDict = new Dictionary<string, ModifiedProperty>(); // TryGetValue直接返回是否存在,不存在则创建并添加 if (!modifiedPropertiesDict.TryGetValue("PropertyName", out var modifiedProperty)) { modifiedProperty = new ModifiedProperty { PropertyName = "PropertyName" }; modifiedPropertiesDict["PropertyName"] = modifiedProperty; } modifiedProperty.OldValue = "Test";
如果业务中频繁按PropertyName查询,这个方案既简洁又能提升性能。
内容的提问来源于stack exchange,提问作者programtreasures
相关产品推荐
相关产品推荐

