gpt4 book ai didi

C# 无法将类型 'System.Double' 的对象转换为类型 'System.Single'

转载 作者:行者123 更新时间:2023-12-02 03:45:28 26 4
gpt4 key购买 nike

在判断这个问题已经得到解答之前,请阅读描述。我有下面这个简单的代码:

Dictionary<string, object> d = new Dictionary<string, object>();

d.Add("key" , 30d);

System.Diagnostics.Debug.WriteLine($" TYPE OF OBJECT IS \"{d["key"].GetType()}\"");

netPlannedHours = (float)d["key"]; ---> **Line of Interest**

当我执行此操作时,我得到:

TYPE OF OBJECT IS "System.Double" Exception thrown:'System.InvalidCastException' in DevOpsAutomatedReporting.dll Unableto cast object of type 'System.Double' to type 'System.Single'.

异常是由标记为“感兴趣的线”的最后一行引起的。我无法真正理解为什么最后一行会导致这种情况,因为对象的类型在运行时被推断为“System.Double”,因此它应该将其转换为 float ,但事实并非如此。有趣的是,如果我用以下两行代码之一替换最后一行(“感兴趣的行”),它会成功地将 double 转换为 float

// Cast the double object to double again and then to float **WORKS**
netPlannedHours = (float)(double)d["key"];

// Convert to float using "Convert.ToSingle()" **WORKS**
netPlannedHours = Convert.ToSingle(d["key"]);

最佳答案

当您添加到字典时,您的 double 将被装箱,因为字典将字符串映射到对象

当您拆箱时,您必须转换为基础类型。在您的情况下,基础类型是 double,因此转换为 float 将失败。

您可以使用Convert.ToSingle来解决这个问题

netPlannedHours = Convert.ToSingle(d["key"])

此方法将计算出基础类型并可以进行转换,但在计算类型转换时会降低性能。

关于C# 无法将类型 'System.Double' 的对象转换为类型 'System.Single',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57107769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com