zoukankan      html  css  js  c++  java
  • C#的隐式和显示类型转换

    原文地址:http://blog.csdn.net/yysyangyangyangshan/article/details/7494577 

    关于隐式转换和显示转换,每种语言都有的,C#中当然也不例外。一般常用到的场合,一种是写运算表达式的时候,要保持整体的数据类型一致和计算准确,比如有一个变量a是int型,但是它是通过加减乘除得到的,那么在运算中就要考虑用显示转换,除的运算需要转换成float或double,再把结果强制转换为int;再一个就是传参数的时候,需要注意哪些需要显示转换,或者对集合赋值的时候也要注意类型的问题。
    1. 隐式类型转换
    所谓隐式转换,就是系统默认的转换,其本质是小存储容量数据类型自动转换为大存储容量数据类型。有如下几种:
    从sbyte类型到short,int,long,float,double,或decimal类型。

    从byte类型到short,ushort,int,uint,long,ulong,float,double,或decimal类型。

    从short类型到int,long,float,double,或decimal类型。

    从ushort类型到int,uint,long,ulong,float,double,或decimal类型。

    从int类型到long,float,double,或decimal类型。

    从uint类型到long,ulong,float,double,或decimal类型。

    从long类型到float,double,或decimal类型。

    从ulong类型到float,double,或decimal类型。

    从char类型到ushort,int,uint,long,ulong,float,double,或decimal类型。

    从float类型到double类型。


    2.显式类型转换

    显式类型转换,即强制类型转换。与隐式转换相反,而且强制转换会造成数据丢失。

    从sbyte到byte,ushort,uint,ulong,或char。

    从byte到sbyte或char。

    从short到sbyte,byte,ushort,uint,ulong,或char。

    从ushort到sbyte,byte,short,或char。

    从int到sbyte,byte,short,ushort,uint,ulong,或char。

    从uint到sbyte,byte,short,ushort,int,或char。

    从long到sbyte,byte,short,ushort,int,uint,ulong,或char。

    从ulong到sbyte,byte,short,ushort,int,uint,long,或char。

    从char到sbyte,byte,或short。

    从float到sbyte,byte,short,ushort,int,uint,long,ulong,char,或decimal。

    从double到sbyte,byte,short,ushort,int,uint,long,ulong,char,float,或decimal。

    从decimal到sbyte,byte,short,ushort,int,uint,long,ulong,char,float,或double。

    当转换有丢失信息或导致异常抛出,转换按照下列规则进行:

    对于从一种整型到另一种整型的转换,编译器将针对转换进行溢出检测,如果没有发生溢出,转换成功,否则抛出一个OverflowException异常。这种检测还与编译器中是否设定了checked选项有关。

    对于从float,double,或decimal到整型的转换,源变量的值通过舍入到最接近的整型值作为转换的结果。如果这个整型值超出了目标类型的值域,则将抛出一个OverflowException异常。

    对于从double到float的转换,double值通过舍入取最接近的float值。如果这个值太小,结果将变成正0或负0;如果这个值太大,将变成正
    无穷或负无穷。如果原double值是Nan,则转换结果也是NaN。

    对于从float或double到decimal的转换,源值将转换成小数形式并通过舍入取到小数点后28位(如果有必要的话)。如果源值太小,则结果为0;如果太大以致不能用小数表示,或是无穷和NaN,则将抛出InvalidCastException异常。

    对于从decimal到float或double的转换,小数的值通过舍入取最接近的值。这种转换可能会丢失精度,但不会引起异常。

  • 相关阅读:
    如何正确的学习?
    GitHub的使用
    freemarker
    Vue的前端路由
    推荐一个压缩图片好用的网站-tinyPNG
    纯CSS实现滚动彩虹色文字
    npm镜像源管理
    UI、UE和UX三者之间的区别?
    移动端rem布局的学习(基于一个网易云播放页面的思考)
    移动前端不得不了解的html5 head 头标签
  • 原文地址:https://www.cnblogs.com/niaowo/p/3685054.html
Copyright © 2011-2022 走看看