关于System.Convert的那些事儿

   2015-11-04 0
核心提示:本篇文章是对System.Convert的那些事儿,进行了详细的分析介绍,需要的朋友参考下
经常看到同事写代码:
bool? obj=从服务器返回来的值,可能为null。
复制代码 代码如下:

if(obj !=null && Convert.ToBoolean(obj)==true)
{
    //Do something
}

上面的代码的意图很明显,先判断obj 是不是null,如果不是null 的话,再调用Convert.ToBoolean方法,判断是不是True。

上面的方法没有任何问题,但有一点要确认的是, obj!=null 这句话需要判断吗?

于是笔者写了下面的代码来对Convert的ToXXX方法传递null值进行测试。

关于System.Convert的那些事儿

可以看到,method.Invoke(null,new object[]{null})
刻意的为ToXXX方法传递null值。


结果如下:
关于System.Convert的那些事儿

从而证明了,对Convert的ToXXX方法传递null值是不会跑出异常的,并且会返回默认的值,
例如int:0,  string:"",  char:'\0',  bool:false;


这代表上面的代码可以简化为

复制代码 代码如下:

if(Convert.ToBoolean(obj))
{
//Do something.
}

顺带提一下,
下面的代码会跑出异常.Convert.ToChar(null);
但是下面这段代码不会:

object obj=null;
Convert.ToChar(obj);返回'\0',空字符.

Convert.ToChar(null)在内部实际调用的是 Convert.ToChar(null, null),然而ToChar(null,null)的实现如下:

复制代码 代码如下:

if (value == null)
{
     throw new ArgumentNullException("value");
}
if (value.Length != 1)
{
     throw new FormatException(Environment.GetResourceString("Format_NeedSingleChar"));
}
return value[0];

所以,直接传null值会出现异常。

 
标签: System.Convert
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

点击排行