首页 > 解决方案 > LINQ Cast 抛出从十进制到双精度的异常

问题描述

使用 .NET Core 3.0,从十进制转换为双精度会引发InvalidCastException

var list = new List<decimal> { 1.00001m };
var dlist = list.Cast<double>().ToList();

但这是一种解决方法:

var list = new List<decimal> { 1.00001m };
var dlist = list.Select(v => (double)v).ToList();

corefx/Cast.cs上的代码似乎显示了一个常规的 ol' 演员正在完成:

yield return (TResult)obj!;

关于为什么需要变通方法的想法?

标签: linqexception.net-corecasting

解决方案


这是因为您的解决方法是进行运行时转换;拆箱和铸造。但是,您要做的是投射一个装箱值。强制转换运算符不支持这一点。要了解有关 Cast<>() 的限制以及它与装箱/未装箱值转换的关系的更多信息,请参阅以下链接:Eric Lippert 的表示和身份


推荐阅读