linq - 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!;
关于为什么需要变通方法的想法?
解决方案
这是因为您的解决方法是进行运行时转换;拆箱和铸造。但是,您要做的是投射一个装箱值。强制转换运算符不支持这一点。要了解有关 Cast<>() 的限制以及它与装箱/未装箱值转换的关系的更多信息,请参阅以下链接:Eric Lippert 的表示和身份
推荐阅读
- ssis - 在 Visual Studio 2017 中的 SSDT 2013 中开发的开放式 SSIS 解决方案
- android-studio - 如何在android studio中获取camera2 api中的每一帧,例如camera api中的PreviewCallback和camerax中的ImageAnalysis.Analyzer?
- reverse-engineering - 0x403020 处的指令引用了 0x403020 处的内存。内存无法执行 ida
- vue.js - 如何更新插件组件的数据值
- flutter - 颤振定制设计形状
- django - 主管没有以用户身份启动进程(带有女服务员的 django 服务器)
- django - 将 qs 添加到迭代器后,Jinja for 循环不起作用。姜戈
- html - 带有 ASP.NET Core 的 CSS HTML,在本地主机和生产环境(Docker)上以不同方式折叠表头文本
- objective-c - 在 OS X 10.11 及更高版本中获取有关 VPN 状态更改的通知
- node.js - 如何用剧作家检查一个元素是否在文档中?