关于c#代码Convert.ToChar(null);出现异常的详解(图)


当前第2页 返回上一页

当执行Convert.ToChar(obj);时,obj的类型已经明确了是object类型,所以调用的是Convert.ToChar(object value);的实现:

1

2

3

4

5

public static char ToChar(object value)

{    if (value != null)

    {        return ((IConvertible) value).ToChar(null);

    }    return '\0';

}

而执行Convert.ToChar(null);时,null可以赋值给多种数据类型,而编译器在处理时默认把它当作了String类型,所以我们在调用堆栈中看到了中间的一步:System.Convert.ToChar(string value),实现如下:

1

2

3

public static char ToChar(string value)

{    return ToChar(value, null);

}

所以才会在 System.Convert.ToChar(String value, IFormatProvider provider)发生了异常

1

2

3

4

5

6

7

public static char ToChar(string value, IFormatProvider provider)

{    if (value == null)

    {        throw new ArgumentNullException("value");

    }    if (value.Length != 1)

    {        throw new FormatException(Environment.GetResourceString("Format_NeedSingleChar"));

    }    return value[0];

}

总结

究其原因,是编译器给与“null”的默认数据类型的问题,所以导致看似相同的代码,却产生不同的结果。

这也涉及到多态和重载(多态是面向对象编程思想的一种特征,重载是指方法可以根据不同的参数个数与类型,来实现多种功能,重载方法可以理解成多态的具体表现形式),如果只有Convert.ToChar(object value);这一种实现,也不会产生本文阐述的问题,也不会有本文了。

以上就是关于c#代码Convert.ToChar(null);出现异常的详解(图)的详细内容!

返回前面的内容

相关阅读 >>

C#静态分析工具 roslynator.analyzers 将方法数量提高了 500 多

C#开发实例-订制屏幕截图工具(三)托盘图标及菜单实现的图文介绍

关于C#中三个关键字params,ref,out的详细介绍

C#基础入门-简单了解注释

C#开发实例-订制屏幕截图工具(七)添加放大镜功能的代码示例

C#用来做什么的

解析C#.net 和vb.net的区别

简单介绍C#中的委托,事件与异步的用法

C#开发实例-订制屏幕截图工具(一)功能概览(图)

详细介绍C#该行已经属于另一个表的解决方法

更多相关阅读请进入《C#》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...