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

