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

使用LINQ简化两个列表:保留索引并移除空值配对

使用LINQ处理关联支付列表的两种方案

针对动态生成的支付类别与金额列表,以下是两种满足需求的LINQ实现方式:

方案一:过滤后保留两个关联列表

通过索引遍历筛选出对应位置均非空的项,生成新的列表:

var originalCategories = new List<string> { "1", "2", "4", "5", "6" };
var originalAmounts = new List<object> { "20.20", "", "", 50.0, "" };

// 筛选有效索引:类别非空、金额非空/非空字符串
var validIndexes = Enumerable.Range(0, Math.Min(originalCategories.Count, originalAmounts.Count))
    .Where(i => !string.IsNullOrWhiteSpace(originalCategories[i]) 
             && !string.IsNullOrWhiteSpace(originalAmounts[i]?.ToString()));

// 生成过滤后的列表
var filteredCategories = validIndexes.Select(i => originalCategories[i]).ToList();
var filteredAmounts = validIndexes.Select(i => originalAmounts[i].ToString()).ToList();

执行后得到的结果与期望一致:

  • filteredCategories = ["1","5"]
  • filteredAmounts = ["20.20","50.0"]

方案二:合并为<int, decimal>类型字典

直接将有效项转换为键值对字典,同时完成类型转换:

var paymentDictionary = Enumerable.Range(0, Math.Min(originalCategories.Count, originalAmounts.Count))
    .Where(i => int.TryParse(originalCategories[i], out _) 
             && decimal.TryParse(originalAmounts[i]?.ToString(), out decimal amount)
             && !string.IsNullOrWhiteSpace(originalCategories[i]))
    .ToDictionary(
        i => int.Parse(originalCategories[i]), 
        i => decimal.Parse(originalAmounts[i].ToString())
    );

生成的字典结构为:{1:20.20, 5:50.0}

注意事项

  • 若原始金额列表已经是字符串类型,可去掉.ToString()调用简化代码
  • 使用Math.Min避免因两个列表长度不一致导致的索引越界问题
  • 额外添加int.TryParse和decimal.TryParse确保类型转换安全,避免运行时异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:20:42