http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 19760|回复: 23

[C#基语法] [C#基语法]之C#类型转换

[复制链接]
发表于 2013-6-21 09:41:58 | 显示全部楼层 |阅读模式
                [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方法吧。相信这个大家一定都非常的熟悉了,我先提供一下这个类签名给大家看
convert.txt (161.22 KB, 下载次数: 711)

本帖被以下淘专辑推荐:



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-6-21 09:54:54 | 显示全部楼层
沙发~ 顶一个
发表于 2013-6-21 09:55:25 | 显示全部楼层
类型转换里,是不是也得提一下,子类、父类之间的转换呢,泛型那个T
哈哈,说了些我不太了解的,羞羞
 楼主| 发表于 2013-6-21 09:57:50 | 显示全部楼层
¤好孩子¤ 发表于 2013-6-21 09:55
类型转换里,是不是也得提一下,子类、父类之间的转换呢,泛型那个T
哈哈,说了些我不太了解的,羞羞

引用类型和特殊类型后面会专门介绍,那有学习一门语言的开始就使用后面的技术的
发表于 2013-7-5 17:47:08 | 显示全部楼层
原来checked()可以验证转换{:soso_e142:}
 楼主| 发表于 2013-7-5 18:36:30 | 显示全部楼层
jjloveC# 发表于 2013-7-5 17:47
原来checked()可以验证转换

必须的
发表于 2013-7-25 13:59:09 | 显示全部楼层
请问“Parse方法”是什么啊,刚开始学还没有接触到哦。
 楼主| 发表于 2013-7-25 14:21:57 | 显示全部楼层
butterfly1107 发表于 2013-7-25 13:59
请问“Parse方法”是什么啊,刚开始学还没有接触到哦。

你在Vs是鼠标放上去有说是的,意思就是把当对的字符串转成Int
发表于 2013-7-25 14:24:10 | 显示全部楼层
站长苏飞 发表于 2013-7-25 14:21
你在Vs是鼠标放上去有说是的,意思就是把当对的字符串转成Int

嗯?这句话真心没有读懂,有点弱了。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-4-27 05:33

© 2014-2021

快速回复 返回顶部 返回列表