LINQ Cast引发从十进制到双精度的异常

时间:2019-09-03 16:30:09

标签: linq exception .net-core casting

使用.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处的代码似乎表明已完成常规的强制转换:

yield return (TResult)obj!;

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

1 个答案:

答案 0 :(得分:0)

这是因为您的解决方法正在执行运行时转换;取消装箱和投放。但是,您要尝试的是强制转换框式值。强制转换运算符不支持此功能。要了解有关Cast <>()的局限性及其与盒装/非盒装值转换的关系的更多信息,请参见以下链接:Representation and Identity by Eric Lippert