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

如何在单个LINQ操作中仅当匹配元素存在时执行对应方法

实现方案

方案1:空条件运算符+FirstOrDefault(C# 6及以上版本支持,推荐)

直接将筛选逻辑放到FirstOrDefault的参数中,搭配空条件运算符?.即可实现需求:匹配不到元素时?.后的逻辑会自动短路不执行,不会抛出任何异常,且整个过程仅遍历集合1次,性能优于你当前的两次遍历写法。

// 单句实现需求,无匹配时不会执行someOperation
list.FirstOrDefault(x => x.property == "valueNotInTheList")?.someOperation();

方案2:自定义通用扩展方法(适配复杂操作场景)

如果后续要执行的逻辑比较复杂,你可以封装专用的LINQ扩展方法复用逻辑:

// 自定义扩展方法
public static class EnumerableExtensions
{
    public static void ExecuteIfMatch<T>(this IEnumerable<T> source, Func<T, bool> predicate, Action<T> operate)
        where T : class
    {
        var target = source.FirstOrDefault(predicate);
        if (target != null) operate(target);
    }
}

// 调用示例
list.ExecuteIfMatch(x => x.property == "valueNotInTheList", x => x.someOperation());

额外说明

如果你的元素是值类型,需要将FirstOrDefault的结果转为对应可空类型后再使用?.运算符,引用类型场景直接使用上述写法即可。

内容的提问来源于stack exchange,提问作者SolarOsQuiere

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:18:03