You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用最简代码向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:45:11