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
相关产品推荐
相关产品推荐

