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

LINQ表达式中如何最优处理null对象以避免空引用异常

解决方案

最优方案(C# 6及以上版本)

直接使用空条件运算符?.+空合并运算符??处理null场景,代码改动量最小,可读性和性能都无损失:

// 注意Array.Empty的泛型类型要和TravelRouteId的实际类型匹配,示例中假设为Guid
var TravelRoute = MyData.TravelRouteByName(
         parameters.Directions
                   ?.Where(p => p.TravelRouteId != null)
                   .Select(p => p.TravelRouteId.Value)
                   .Distinct()
                   .ToArray()
         ?? Array.Empty<Guid>()
);

原理解释

  • 空条件运算符?.会先校验parameters.Directions是否为null,为null时直接中断后续LINQ链式调用,返回null,不会触发Where方法对source参数的非空校验,避免抛出异常
  • 空合并运算符??会在前序调用返回null时,回退返回指定的空数组,保证传入TravelRouteByName的参数永远为非空数组,符合方法的参数要求

兼容低版本C#方案(C# 5及以下)

如果运行环境不支持空条件运算符,可以用三元运算符提前做null判断:

var routeIdList = parameters.Directions == null
    ? Array.Empty<Guid>()
    : parameters.Directions
                .Where(p => p.TravelRouteId != null)
                .Select(p => p.TravelRouteId.Value)
                .Distinct()
                .ToArray();
var TravelRoute = MyData.TravelRouteByName(routeIdList);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:06:05