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

C#如何简化三元条件表达式 新增CustomerData空校验并解决表达式树报错

问题1:三元表达式的简化写法

普通C#运行时场景(不需要转换为表达式树)下,你写的x.Customer?.CustomerData?.IsSet ?? false就是官方推荐的简化写法,符合IDE的简化提示要求:空条件运算符?.会在前置对象为null时直接返回null,再配合空合并运算符??给null的情况赋默认值false,逻辑和你原来的三元表达式完全等价,同时还自动完成了CustomerData的空校验。

问题2:表达式树不支持条件访问的报错解决

报错原因

你遇到的An expression tree lambda may not contain conditional access expression错误,是因为当前场景下lambda需要被转换为表达式树(Expression Tree)(常见于EF Core数据查询、GraphQL字段映射等场景),而C#表达式树规范至今不支持?.条件访问运算符的语法解析,无法转换为对应的表达式树节点,因此运行时抛出异常。

解决方案

直接使用基础的逻辑运算符写显式空校验即可,写法完全兼容表达式树:

// 写法1:逻辑与短路写法,和原逻辑完全等价
Field("isSet", x => x.Customer != null && x.Customer.CustomerData != null && x.Customer.CustomerData.IsSet);

// 写法2:显式三元写法,逻辑更直观
Field("isSet", x => x.Customer != null && x.Customer.CustomerData != null ? x.Customer.CustomerData.IsSet : false);

如果是EF Core场景,上述写法会被自动转换为对应SQL的左连接空判断逻辑,不会产生数据库端的报错,也不会出现空引用异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 05:54:09