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

如何使用LINQ计算可空Int32类型List中相邻元素的差值

实现方案

完全可以通过LINQ实现,核心用Zip方法配对相邻元素,再补首位null即可。

完整代码示例

List<Int32?> numbers = new List<Int32?> { 2, 1, 3, null, 6, 7 };

var result = numbers
    // 配对原列表和跳过首元素的列表,得到所有相邻元素对
    .Zip(numbers.Skip(1), (previous, current) => 
        // 仅两个元素都不为空时计算差值,否则返回null
        previous.HasValue && current.HasValue ? current - previous : null)
    // 首位补null,和原列表长度对齐
    .Prepend(null)
    .ToList();

逻辑说明

  1. 配对后生成的相邻元素对依次为:(2,1)、(1,3)、(3,null)、(null,6)、(6,7)
  2. 按照规则计算得到5个差值:-1、2、null、null、1
  3. 首位置补null后,最终输出结果为 { null, -1, 2, null, null, 1 },完全符合预期要求。

低版本.NET兼容写法

如果使用的.NET Framework版本不支持Prepend方法,可以用Concat实现相同效果:

var result = new Int32?[] { null }
    .Concat(numbers.Zip(numbers.Skip(1), (previous, current) => 
        previous.HasValue && current.HasValue ? current - previous : null))
    .ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 05:36:04