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

C# 12中结合扩展运算符的空值检查优化方案咨询

C# 12中结合扩展运算符的空值检查优化方案咨询

我完全懂你这种觉得空值检查写起来有点啰嗦的感觉——C#12的集合表达式和扩展元素确实大幅简化了集合初始化的代码,但碰到null场景时,总觉得现有写法有点破坏代码的简洁性。

先说说你的核心需求:当oldList为null时,希望newType也保持null;当oldList非null时,用扩展运算符生成新的CustomList,同时想摆脱三元运算符的写法。

小技巧:用非null模式简化现有写法

如果只是想让代码更紧凑一点,可以用C#的非null模式替代is not null,写法更短但语义完全一致:

CustomList newType = oldList is {} ? [.. oldList] : null;

这里的is {}会匹配所有非null的实例,和is not null效果相同,但字符量更少,能让代码看起来更简洁。

更优雅的复用方案:封装扩展方法

如果需要在多个地方复用这个逻辑,封装一个扩展方法会是更优的选择,彻底让调用代码变得干净:

public static CustomList? ToCustomList(this IEnumerable<YourItemType>? source)
{
    return source is not null ? [.. source] : null;
}

之后你只需要一行代码就能完成转换:

CustomList newType = oldList.ToCustomList();

为什么[.. oldList ?? []]不符合需求

你提到的这个写法确实能避免null异常,但它会在oldList为null时生成一个空的CustomList实例,而不是你想要的null值,所以确实不符合你的预期。

目前C#12本身并没有内置的运算符组合能直接替代三元表达式实现“扩展null时返回null”的逻辑,但上面两种方式已经能很好地平衡简洁性和可读性了。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 07:38:02