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

C#实现Dictionary<double, List<double>>转对应可空值类型字典的方法

问题诊断

你写的字典转换代码报错的核心原因是列表初始化逻辑错误:new List<double?>() { oldDic[key].Select(s => (double?) s).ToList() }这行代码是把Select返回的完整List<double?>作为单个元素插入新列表,类型不匹配导致编译失败。

List转换方案评估

你现有List<double>转List<double?>的写法list.Select(s => (double?)s).ToList()是完全可用的,绝大多数场景下性能足够,无需额外优化。如果追求极致性能,可以使用List构造函数预先分配容量,避免动态扩容开销:

List<double?> newList = new List<double?>(oldList.Count);
newList.AddRange(oldList.Cast<double?>());

完整字典转换最优实现

方案1:简洁写法(推荐绝大多数场景使用)

直接调用ToDictionary重载即可,无需额外投影匿名类,可读性高且性能够用:

Dictionary<double, List<double?>> newDict = oldDict.ToDictionary(
    kvp => kvp.Key,
    kvp => kvp.Value.Select(d => (double?)d).ToList()
);

方案2:高性能写法(适用于超大规模字典场景)

手动遍历预先分配容量,省去LINQ委托调用的微小开销:

// 预先指定字典容量,避免扩容损耗
Dictionary<double, List<double?>> newDict = new Dictionary<double, List<double?>>(oldDict.Count);
foreach (var kvp in oldDict)
{
    var oldList = kvp.Value;
    // 预先指定列表容量
    List<double?> newList = new List<double?>(oldList.Count);
    foreach (var num in oldList)
    {
        newList.Add(num);
    }
    newDict.Add(kvp.Key, newList);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:54:03