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

.NET Core 5降级到.NET Framework 4.8三目表达式类型错误解决方案

C#代码从.NET Core 5降级到.NET Framework 4.8三目表达式类型匹配报错修复

问题背景

出于兼容性要求,需将C#代码从.NET Core 5降级到.NET Framework 4.8,示例ToyFunction在.NET Core 5中运行正常,但在.NET Framework 4.8环境下触发报错:

无法确定条件表达式的类型,因为'System.Collection.Generic.List<double?>'与double?之间不存在隐式转换

问题代码

public static Dictionary<double, List<double?>> ToyFunction(Dictionary<double, List<double?>> dic1)
{
    Dictionary<double, List<double?>> dtot = 
             dic1.Keys
                 .OrderBy(key => key)
                 .Select(key => new
                 {
                     Key = key,
                     Value = new List<double?>
                        (dic1.ContainsKey(key) ? dic1[key] : new double?[2]).ToList()
                 }).ToDictionary(grp => grp.Key, grp => grp.Value);

错误定位

初步判断错误位于三目表达式分支返回值类型不匹配的位置,对应代码段:

Value = new List<double?>
   (dic1.ContainsKey(key) ? dic1[key] : new double?[2]).ToList()

此前曾尝试将new double?[2]显式转换为List<double?>,未解决问题。

有效修复方案

(dic1.ContainsKey(key) ? dic1[key] : (new double?[2]).ToList() ).ToList()

原因说明

.NET Core 5配套的C#编译器对三目表达式的类型推断规则做了优化,可自动识别两个分支均为IEnumerable<double?>兼容类型;而.NET Framework 4.8对应的旧版C#编译器要求三目表达式两个分支的返回值必须显式类型一致,因此将数组分支预先转换为List<double?>即可匹配类型,通过编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:51:04