使用.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!;
关于为什么需要变通办法的想法?
答案 0 :(得分:0)
这是因为您的解决方法正在执行运行时转换;取消装箱和投放。但是,您要尝试的是强制转换框式值。强制转换运算符不支持此功能。要了解有关Cast <>()的局限性及其与盒装/非盒装值转换的关系的更多信息,请参见以下链接:Representation and Identity by Eric Lippert