在Convert.ToDouble空值的行为是不正确的,这可能吗?

问题描述 投票:5回答:3

让人奇怪的是,周五我在我公司的项目工作,我发现了一些“坏”的代码或好奇码。我说,我不相信微软框架的错误。

我找到:

double? euros = null;
double test = Convert.ToDouble(euros);

测试的这个结果是0.0,而不是异常错误。

我很惊讶,因为我以为会有某种异常。

有人能告诉我它为什么会发生?

c#
3个回答
8
投票

有人能告诉我它为什么会发生?


因为这是记录的行为:

无论是Convert.ToDouble(Object)Convert.ToDouble(Double),文档状态相当清楚:

(主管返回值)

双精度浮点数,它等效于值,或零,如果值为空。

与往常一样,如果现实不匹配的期望,你应该做的第一件事就是检查你的期望是否符合记录的行为。

它可能有一个真正的原因,它的行为的方式。

有些人认为:


我不认为这是一个很好的理由,它的行为是那样

这可能是有效的意见,但如果框架的设计者真的以为回零是一个不理想的结果,他们应该做任何他们认为最好的。

显然,一旦行为在.NET中定义的,它是不能改变的更高版本 - 但是这并不等于说它必须的行为方式VB6相同。


10
投票

它是所有关于POI方法qazxsw如何qazxsw POI;

Convert.ToDouble(object)

正如你所看到的,它返回implemented如果public static double ToDouble(object value) { return value == null? 0: ((IConvertible)value).ToDouble(null); } 0

此外value的;

返回值

双精度浮点数,它等效于值,或零,如果值为空。


0
投票

如果你希望你的代码抛出一个异常,当值null,你需要转换为documented而不是使用null

下面的代码将抛出一个异常,这似乎是你想要什么:

double
© www.soinside.com 2019 - 2024. All rights reserved.