【发布时间】:2019-07-19 07:41:27
【问题描述】:
在判断这个问题已经回答之前,请阅读描述。我在下面有这个简单的代码:
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**
当我执行这个时,我得到:
对象类型是“System.Double” 抛出异常: DevOpsAutomatedReporting.dll 中的“System.InvalidCastException”无法 将“System.Double”类型的对象转换为“System.Single”类型。
异常是由标记为“感兴趣的行”的最后一行引起的。我真的不明白为什么最后一行会导致这种情况,因为对象的类型在运行时被推断为“System.Double”,因此它应该将其转换为浮点数,但事实并非如此。有趣的一点是,如果我用以下两行代码中的任何一个替换最后一行(“感兴趣的行”),它会成功地将双精度转换为浮点数
// 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"]);
【问题讨论】:
标签: c# .net casting type-conversion precision