关于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值进行测试。

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

结果如下:

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

(0)

相关推荐

  • 关于System.Convert的那些事儿

    经常看到同事写代码:bool? obj=从服务器返回来的值,可能为null. 复制代码 代码如下: if(obj !=null && Convert.ToBoolean(obj)==true){    //Do something} 上面的代码的意图很明显,先判断obj 是不是null,如果不是null 的话,再调用Convert.ToBoolean方法,判断是不是True. 上面的方法没有任何问题,但有一点要确认的是, obj!=null 这句话需要判断吗? 于是笔者写了下面的代码来对C

  • 通过DNS TXT记录执行powershell

    0x00简介 DNS TXT记录一般用来记录某个主机名或者域名设置的说明,在这里可以填写任何东西,长度限制255.绝大多数的TXT记录是用来做SPF记录(反垃圾邮件).本篇文章主要介绍如何使用 nishang 通过创建TXT记录执行powershell脚本.当然,首先你要有一个域名. 0x01创建TXT记录 这里需要使用nishang中的一个脚本 OUT-DnsTxt . 1.常见命令 因为常见命令比较短,所以可以直接添加到TXT记录中,如下图: 现在查看一下TXT记录: 可以看到记录已经成功添

  • .NET MD5加密解密代码解析

    MD5简介: 是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数).不管是MD2.MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要.虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4和MD5完全不同,那是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑.这三个算法的描述和C语言源代码在Internet RFCs 1321中有详细的描述,这是一份最权威的文档

  • C#编写的Base64加密和解密类

    这个C#类是一个基于Base64的加密和解密类,用户可以可以使用默认的秘钥进行加密.解密,也可以自己设定秘钥进行加密和解密,非常实用 代码一:非常精简的代码 /// <summary> /// Base64加密,解密方法 /// </summary> /// <paramname="s">输入字符串</param> /// <paramname="c">true-加密,false-解密</param&

  • PowerShell把IP地址转换成二进制的方法

    IPv4地址其实是32位二进制数字,然后我们将它分成四段,每段8位.8位二进制能表达的范围是0~255,所以点分十进制的每一个数字的取值都在0~255之间.有的时候,比如为了换算子网掩码,我们需要将IP地址还原成二进制串的形式,如:11000000101010000000110000100001.今天小编看到一个例子就是来完成这个操作的. 代码如下: 复制代码 代码如下: $ipV4 = '192.168.12.33' -join ($ipV4.Split('.') | ForEach-Obje

  • C# Quoted-Printable编码、解码

    复制代码 代码如下: # using System; # using System.Collections; # using System.Text; # # /// <summary> # /// Class for encoding and decoding a string to QuotedPrintable # /// RFC 1521 http://www.ietf.org/rfc/rfc1521.txt # /// RFC 2045 http://www.ietf.org/rfc

  • .NET 2.0 的压缩功能代码

    在.net 1.1中我们要实现压缩这一功能,一般都是用open source的SharpZipLib 或者调用J#类库. 现在在.net 2.0中增加了压缩功能,名字空间为 using System.IO.Compression; 以下是使用示例: 压缩字符串 复制代码 代码如下: public static string ZipString(string unCompressedString)  { byte[] bytData = System.Text.Encoding.UTF8.GetB

  • asp.net 无刷新翻页就是这么简单

    个人喜欢用Repeater,因其简洁,此AjaxPager定向为Repeater! 一步一步看来: 代码 复制代码 代码如下: [DefaultProperty("TotalRecord"), ToolboxData("<{0}:AjaxPager runat=server></{0}:AjaxPager>")] public class AjaxPager : WebControl,ICallbackEventHandler { publi

  • C#实现pdf导出 .Net导出pdf文件

    最近碰见个需求需要实现导出pdf文件,上网查了下代码资料总结了以下代码.可以成功的实现导出pdf文件. 在编码前需要在网上下载个itextsharp.dll,此程序集是必备的.楼主下载的是5.0版本,之前下了个5.4的似乎不好用. 下载之后直接添加引用. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Webpdf.aspx.cs" Inherits="Web导出

  • ASP.NET(C#)

    一个生成不重复随机数的方法 //生成不重复随机数算法 private int GetRandomNum(int i,int length,int up,int down) {  int iFirst=0;  Random ro=new Random(i*length*unchecked((int)DateTime.Now.Ticks));   iFirst=ro.Next(up,down);  return iFirst; }  发表于 @ 2005年12月30日 3:44 PM | 评论 (0

随机推荐