关于System.Convert的那些事儿

 更新时间:2013年05月14日 12:36:13   作者:  
本篇文章是对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值进行测试。

image

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


结果如下:
clip_image004

从而证明了,对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值会出现异常。

相关文章

  • 详解WPF的InkCanvas选择模式

    详解WPF的InkCanvas选择模式

    这篇文章主要介绍了WPF InkCanvas选择模式的相关资料,帮助大家更好的理解和学习使用c# wpf,感兴趣的朋友可以了解下
    2021-04-04
  • C#实现读取DataSet数据并显示在ListView控件中的方法

    C#实现读取DataSet数据并显示在ListView控件中的方法

    这篇文章主要介绍了C#实现读取DataSet数据并显示在ListView控件中的方法,涉及C#操作DataSet及ListView控件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • C#引用类型作为方法的参数分析

    C#引用类型作为方法的参数分析

    这篇文章主要介绍了C#引用类型作为方法的参数分析,以实例的形式较为详细的分析了参数的传值问题,需要的朋友可以参考下
    2014-11-11
  • Unity中的PostProcessScene实用案例深入解析

    Unity中的PostProcessScene实用案例深入解析

    这篇文章主要为大家介绍了Unity中的PostProcessScene实用案例深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 关于C# 4.0新特性“缺省参数”的实现详解

    关于C# 4.0新特性“缺省参数”的实现详解

    这篇文章主要给大家介绍了关于C# 4.0新特性“缺省参数”的实现,文中通过示例代码介绍的非常详细,对大家学习或者使用C# 4.0具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-06-06
  • C#中的匿名函数、lambda表达式解读

    C#中的匿名函数、lambda表达式解读

    这篇文章主要介绍了C#中的匿名函数、lambda表达式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • C#实现跨线程操作控件方法

    C#实现跨线程操作控件方法

    这篇文章主要介绍了C#实现跨线程操作控件方法,主要采用异步访问方式实现,需要的朋友可以参考下
    2014-10-10
  • C#面向对象编程中依赖反转原则的示例详解

    C#面向对象编程中依赖反转原则的示例详解

    在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解、灵活和可维护。本文将通过实例详细讲讲C#面向对象编程中依赖反转原则,需要的可以参考一下
    2022-07-07
  • Unity3D更改默认的脚本编辑器

    Unity3D更改默认的脚本编辑器

    这篇文章简要的说明了如何去修改Unity默认的脚本编辑器,大大提升了灵活性和便捷性,文本有详细的图文介绍,能让你观看的更加清晰,希望对你有所帮助
    2021-06-06
  • c# 通过WinAPI播放PCM声音

    c# 通过WinAPI播放PCM声音

    这篇文章主要介绍了c# 通过WinAPI播放PCM声音的方法,帮助大家更好的理解和使用c#编程语言,感兴趣的朋友可以了解下
    2020-12-12

最新评论