苏飞论坛

标题: [C#基语法]之C#类型转换 [打印本页]

作者: 站长苏飞    时间: 2013-6-21 09:41
标题: [C#基语法]之C#类型转换
                [C#基语法]之C#类型转换
系列文章导航

  [C#基语法]苏飞传奇版   http://www.sufeinet.com/thread-3091-1-1.html

类型转换的分类

      C#有两种转换数据类型的方式:隐式转换方式和显式转换方式
1.隐式转换方式
我们经常需要把一个数据从一种类型转换为另一种类型,这就是类型转换
比如如下代码
[C#] 纯文本查看 复制代码

            byte b = 25;
            byte a = 8;
            byte sum;
            sum = a + b;

如果在编译器里一定会会产生一个错误
Cannot implicitly convert type 'int' to 'byte' (不能把int隐式转换为byte类型)
原因是我们把两个Byte类型数据相加在一起时,会返回一个int类型的结果,而不是一个byte类型结果
这是因为byte中只能存储8位数据,所以把两个Byte相加就可能出现起出8位的数据,所以会出错。
如果我们把sum 的类型换成int就不会出现问题了
[C#] 纯文本查看 复制代码
 byte b = 25;
            byte a = 8;
            int sum;
            sum = a + b;

下面我提供一个可以隐式转换类型的表格大家做为参考吧
源类型 目的类型
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,ulong float,double,decimal
floatdouble
char ushort,int,uint,long,ulong,float,double,decimal

以上表格是可以从源类型隐式转换为目的类型的类型,
只要上面表格里面的都不需要显式的都转换类型。
net会自动转换并不会出错。
2.显式转换方式
显式转换,也可以叫做强制转换,因为在显式转换过程中是很有可能出错的。
一般语法如下
[C#] 纯文本查看 复制代码
  long b = 25;
            int a = (int)b;

这是把目的类型放在前面的小括号里面。
在显式的数据类型转换时很有可能出产生溢出比如
[C#] 纯文本查看 复制代码
  long b = 3000000000;
            int a = (int)b;

大家想一下会输出什么,
错误
3000000000
答案是:
  1. -1294967296
复制代码
大家可以动手试试
再看如下代码
[C#] 纯文本查看 复制代码
  try
            {
                long b = 3000000000;
                int a = checked((int)b);
            }
            catch (Exception)
            {
               
                throw;
            }

其实在转换之前可以使用checked关键字来验证一下是否安全,
checked关键字可以检查数据类型的转换是否安全
运行如上代码会出现如下异常
  1. 算术运算导致溢出。
复制代码
还有一种情况是数据丢失
比如
  1.              // 第一种情况
  2.                double b = 10.1;
  3.                 int a = (int)(b + 0.5);
  4.              //第二种情况
  5.                 double b = 10.1;
  6.                 int a = (int)(b);
复制代码
想一下如上两种情况会输出什么
答案如下
  1. 10
  2. 10
复制代码
便是10,也就是说他会取一个最小的整数,而不会进行四舍五入,更不会有小数位,因为目标类型是int类型
这点大家一种要注意,如数字比较精确的地方一定不要使用哦
ASCII转换
  1. int b = 88;
  2.                 char a = (char)(b);
复制代码
上面代码会转出一个大写的X
也就是说int类型要可以直接通过char来转换为ASCII对应的字符

下面咱们再看一种Parse方法的方式
  1.                 string b = "105";
  2.                 int a = int.Parse(b);

  3.                 string b = "105.5";
  4.                 int a = int.Parse(b);
复制代码
看看上面会输出什么,
答案是
  1. 105
  2. 异常:输入字符串的格式不正确。
复制代码
第二个会报错,在这种情况下是不会进行最小整数的,这点大家也要注意
对于Object类型我不得不提一下Tostring()方法了
所有的Object类型基本上都有一个toString()方法,这是系统重载过的,可以直接把类型转成String类型非常 方法比如
[C#] 纯文本查看 复制代码
                int b = "105.5";
                string a = b.ToString();

好了最后咱们一起来看一下Convert方法吧。相信这个大家一定都非常的熟悉了,我先提供一下这个类签名给大家看
(, 下载次数: 714)