一、C#类型的转换

在c#中类型的转换分两种:显式和隐式,基本的规则如下:

1、基类对象转化为子类对象,必须显式转换,规则:(类型名) 对象。
2、值类型和引用类型的转换采用装箱(boxing)或拆箱(unboxing).
3、子类转化为基类对象。
4、基本类型互相之间转化可以用Covent类来实现。
5、字符串类型转换为对应的基本类型用Parse方法,除了String类型外其他的类型都可以用Parse方法。
6、用GetType可以取得对象的精确类型。
7、子类转化为基类,采用隐式转换。

二、C#中的is

检查一个对象是否兼容于其他指定的类型,并返回一个Bool值,如果一个对象是某个类型或是其父类型的话就返回为true,否则的话就会返回为false。永远不会抛出异常
如果对象引用为null,那么is操作符总是返回为false,因为没有对象可以检查其类型。

例如

复制代码代码如下:
object o = new object();
if (o is Label)
{
    Label lb = (Label)o;
    Response.Write("类型转换成功");
}
else
{
    Response.Write("类型转换失败");   
}

三、C#中as的转换规则

1、检查对象类型的兼容性,并返回转换结果,如果不兼容则返回null;
2、不会抛出异常;
3、如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常;
4、用as来进行类型转换的时候,所要转换的对象类型必须是目标类型或者转换目标类型的派生类型

例如

复制代码代码如下:
object o = new object();    
Label lb = o as Label;    
if (lb == null)
{
    Response.Write("类型转换失败");
}
else
{      
    Response.Write("类型转换成功"); 
}

使用as操作符有如下几点限制

第一个就是,不用在类型之间进行类型转化,即如下编写就会出现编译错误。

复制代码代码如下:
NewType newValue = new NewType();
NewType1 newValue = newValue as NewType1;

第二个就是,不能应用在值类型数据,即不能如下写(也会出现编译错误)。

复制代码代码如下:
object objTest = 11;
int nValue = objTest as int;

四、as与is的区别

1、AS在转换的同事兼判断兼容性,如果无法进行转换,则 as 返回 null(没有产生新的对象)而不是引发异常。有了AS我想以后就不要再用try-catch来做类型转换的判断了。因此as转换成功要判断是否为null。

2、AS是引用类型类型的转换或者装箱转换,不能用与值类型的转换。如果是值类型只能结合is来强制转换
3、IS只是做类型兼容判断,并不执行真正的类型转换。返回true或false,不会返回null,对象为null也会返回false。

4、AS模式的效率要比IS模式的高,因为借助IS进行类型转换的化,需要执行两次类型兼容检查。而AS只需要做一次类型兼容,一次null检查,null检查要比类型兼容检查快。

五、在进行类型转换的时候,可以按照如下的方式进行选择

1、Object => 已知引用类型
使用as操作符来完成

2、Object => 已知值类型
先使用is操作符来进行判断,再用类型强转方式进行转换

3、已知引用类型之间转换
首先需要相应类型提供转换函数,再用类型强转方式进行转换

4、已知值类型之间转换
最好使用系统提供的Convert类所涉及的静态方法

六、(int)和Int32.Parse(),Convert.ToInt32()2881064151三者的区别

1、(int)转换:用在数值范围大的类型转换成数值范围小的类型时使用,但是如果被转换的数值大于或者小于数值范围,则得到一个错误的结果,利用这种转换方式不能将string转换成int,会报错。

2、Int32.Parse()转换:在符合数字格式的string到int类型转换过程中使用,并可以对错误的string数字格式的抛出相应的异常。

3、Convert.ToInt32()转换:使用这种转换,所提供的字符串必须是数值的有效表达方式,该数还必须不是溢出的数。否则抛出异常。

基本类型互相之间转化可以用Covent类来实现。的更多相关文章

  1. 再谈怎样以最简单的方法将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式

    今天review代码,看见某些大爷在将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式时仍然仅仅顾结果不注重过程,"大爷"咱能负点责任吗? 将泛型为St ...

  2. TypedValue.applyDimension 中dp和sp之间转化的真相

    转载自http://www.cnblogs.com/xilinch/p/4444833.html 最近在看了许多关于dp-px,px-dp,sp-px,px-sp之间转化的博文,过去我比较常用的方式是 ...

  3. ASP实现https和http之间转化

    HTTPS 是一个安全通信信道,用于在客户计算机和服务器之间交换信息.它使用安全套接字层 (SSL). HTTPS (Secure Hypertext Transfer Protocol) 安全超文本 ...

  4. C++值多态:传统多态与类型擦除之间

    引言 我有一个显示屏模块: 模块上有一个128*64的单色显示屏,一个单片机(B)控制它显示的内容.单片机的I²C总线通过四边上的排针排母连接到其他单片机(A)上,A给B发送指令,B绘图. B可以向屏 ...

  5. (转)类(class)和结构(struct)的区别是什么?它们对性能有影响吗?.NET BCL里有哪些是类(结构),为什么它们不是结构(类)?在自定义类型时,您如何选择是类还是结构?

    转自:http://blog.csdn.net/lingxyd_0/article/details/8695747 类(class)和结构(struct)的区别是什么?它们对性能有影响吗?.NET B ...

  6. byte[] 数组和字符串的转换,与byte[] 数组和int类型的之间的转化

    我们先来看看byte bool  int ushort  等的定义 首先时byte[]数组与string之间的转换 string 转换位byte[] 数组 string str = "1-1 ...

  7. javascript不同类型数据之间的运算是如何转换的

    js中不同类型的基础数据之间可以转换,这种转换是有规则可寻的,并非随意的随机的.在js中有5种基础类型数据:string.number.boolean.null.undefined,其中,常用于计算或 ...

  8. javascript数据类型以及类型间的转化函数

    js 有五种基本数据类型,还有个引用类型 1.undefined 类型,只有一个志undefined 当变量未初始化时都会是这个类型. 2.null 类型,也是只有一个值null,null类型的typ ...

  9. Python之dict(或对象)与json之间转化

    在Python语言中,json数据与dict字典以及对象之间的转化,是必不可少的操作. 在Python中自带json库.通过import json导入. 在json模块有2个方法, loads():将 ...

随机推荐

  1. liunx(centos7 ) 免密码登录

    centos7 1.准备两台机器 如:(A机器) 和  (B机器) A机器 删除(.ssh目录下文件 known_hosts) 2. 对两台机器生成密钥 在  (A机器)上执行命令: [root@iZ ...

  2. Linux下修改当前用户的最大线程数和 open files

    1 查看当前用户的线程 ulimit -a 2 修改配置文件 vi /etc/security/limits.d/90-nproc.conf 3 改完即可生效 4 修改可打开的最大文件数 vi  /e ...

  3. Go之对象拷贝

    这里interface{}就相当于c#,java中的object, boy := util.Boy{util.Person{"Eric", 19, "boy"} ...

  4. flexbox子盒子order属性

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 免费SVN、Git项目托管主机推荐

    Unfuddle 200MB的免费空间,界面友好,特性丰富,支持Git,但只能一个账户一个用户并且只允许一个项目,付费服务相对来说价格偏高 CodeSpaces 500MB,一个账户两个免费用户,付费 ...

  6. Cookie利用神器:CookieHacker

    转自evilcos的博客 看到那么多苦逼的跨站师在问Cookie利用工具,不忍心,还是把自己写的Chrome扩展开源出来吧,功能极简,仿造<我的渗透利器>里提到的Original Cook ...

  7. 分析JobInProgress中Map/Reduce任务分配

    1.JobTracker能否决定给当前的TaskTracker节点分配一个Job的具体的哪一个任务? 2.什么是map本地任务? 3.nonRunningMapCache的作用是什么? 4.从Task ...

  8. 如何构建日均千万PV Web站点 (一)

    其实大多数互联网网站起初的网站架构都是(Linux+Apache+MySQL+PHP). 不过随着时代的发展,科技的进步.互联网进入寻常百姓家的生活.所谓的用户的需求,铸就了一个个互联网大牛: htt ...

  9. flask路由中增加正则表达式

    #coding=utf-8 from flask import Flask from werkzeug.routing import BaseConverter class RegexConverte ...

  10. AngularJS控制器和AngularJS过滤器的学习(3)

    前面简单的学习了AngularJS的表达式和指令,就可以说大概对AngularJS有了一定的了解吧,嘿嘿,下面就来总结学习一下AngularJS的控制器和过滤器哦. 说起来AngularJS控制器,其 ...