C# AS与Is

摘要:
在C#中,一切都是一个对象。这里,如所用。As是C#语言中的关键字。因此,您需要由is操作符执行显示转换,它会自动检查计时是否与类型兼容并返回结果。如果对象引用为空,则始终返回false。“);作为运算符转换:Class2cls2=cls1asClass2;如果(cls2!

C#中,所有的东西都是对象。因此任何常数也是一个整型对象。这里用到了asasC#语言里面的一个关键字。as运算符类似于类型转换,所不同的是,当转换失败时,as运算符将产生空,而不是引发异常。在形式上,这种形式的表达式:expression as type as 运算符只执行引用转换和装箱转换。as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用case表达式来代替其执行关于is的其实也差不多,只是IS不会帮你进行任何的转换。所以需要自已进行显示转换is操作符进行转换,它自动检查时局是否和类型兼容,并返回结果。而且它不会抛出异常。如果对象引用为null,则is总返回false

if (cls1 is Class2) { Class2 cls2 = (Class2)cls1; } else System.Console.WriteLine("Error 2!");

as操作符进行转换:

Class2 cls2 = cls1 as Class2; if (cls2!=null) System.Console.WriteLine("Ok"); else System.Console.WriteLine("Error!");

对比两种方式,is需要做两次对象的类型检查,而as需要做一次对象类型检查,再加一次null的检查,null检查开销比对象类型检查少。相对as的方法效率高些,现在明白了isas的用处了,主要是类型的转换和判断,如果只是检测类型是否相符那么只用is就可以了,如果要进行类型转化可以直接用as。其实可以直接进行强制转换,只是当类型不符合时会出错,这是可以利用try{} catch(){} 来进行,但抛出的异常时什么呢? 类型转换1.任何类型都可以转换为其基类类型,用隐式转换完成; 2.任何类型转换为其派生类型时,必须进行显示转换。如:(类型名)对象名; 3.使用GetType可以取得任何对象的精确类型; 4.基本类型可以使用Convert类实现类型转换; 5.除了string以外的其他类型都有Parse方法,用于将字符串类型转换成对应的基本类型; 6.值类型和引用类型的转换称为装箱(boxing)或拆箱(unboxing)

二、is/as示例is转换规则:1. 检查对象类型的兼容性,并返回结果true(false)2.不会抛出异常;3.如果对象为null,刚返回false示例: C#代码

  1. object o ="abc";
  2. if(oisstring) //执行第一次类型兼容性检查
  3. {
  4. string s = (string)o; //执行第二次类型兼容性检查,并转换
  5. MessageBox.Show("转换成功!");
  6. }
  7. else
  8. {
  9. MessageBox.Show("转换失败!");

}as转换规则:

1.检查对象类型的兼容性,并返回转换结果,如果不兼容则返回null2.不会抛出异常;3.如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常;

示例:C#代码

  1. object o ="abc";
  2. string s = oasstring;//执行第一次类型兼容性检查,并返回结果
  3. if(s !=null)
  4. MessageBox.Show("转换成功!"); else MessageBox.Show("转换失败!");

简记: Is是先进行兼容性检查再进行显式转换,As是执行一次类型兼容性检查,并返回结果

http://blog.csdn.net/xqiangqiang/article/details/5287447

在C#中已经提供了一个很好的类型转换方式,那么在进行类型转换的时候,可以按照如下的方式进行选择。

as操作符来说,它不会做过的转换操作,当需要转换对象的类型属于转换目标类型或者转换目标类型的派生类型的时候,那么此转换操作才能成功,而且并不产生新的对象

类型转换

使用选择

Object => 已知引用类型

使用as操作符来完成

Object => 已知值类型

先使用is操作符来进行判断,再用类型强转方式进行转换

已知引用类型之间转换

首先需要相应类型提供转换函数,再用类型强转方式进行转换

已知值类型之间转换

最好使用系统提供的Convert类所涉及的静态方法

免责声明:文章转载自《C# AS与Is》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Redis热点数据高频访问问题以及解决方案矩阵理论 第三讲 线性变换及其矩阵下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【面试题】新东方.NET工程师面试题总结

1、学校几本(是否统招)、英语等级、大学成绩排名Top%几、当前月薪(入职前是否能提供薪资证明材料)、期望月薪 二本,统招英语四级排名top10 2、做过的项目技术栈是什么?(例如 .NET、Sql Server、Dapper、EF、Redis……) .NET、C#、EF、MVC、SQL Server、Oracle、WebService、API、SDK、R...

第一次开发电商项目

先讲一下工作经历吧,09年上大四时就偷跑到北京做开发(moss),10年大学毕业后正式来北京。先做了近两年的网络教育平台开发,后来跳到一家物联网创业公司,做了两年的C# 仓储物流、手持机、RFID设备软件的开发。个人觉得再这样下去技术杂而不精今年3月份就跳到了现在的这家电商创业公司。 其实进入这家公司之前也曾经犹豫过,因为开的工资太低了,比普通行业C#开发...

推荐一些C#相关的网站、资源和书籍 (转载自http://www.cnblogs.com/jiangxiaofan/p/3808316.html)

推荐一些C#相关的网站、资源和书籍 (转载自http://blog.csdn.net/chinacsharper/article/details/17514923)   一、网站 1、http://msdn.microsoft.com/zh-CN/ 微软的官方网站,C#程序员必去的地方。那里有API开发文档,还有各种代码、资源下载。 2、http://...

C# 与 Java 的一些差异

如果你是 Java 开发人员,则可以在 Xamarin 平台上充分利用你的技能和现有代码,同时获得 C# 的代码重用优势。你会发现 C# 语法与 Java 语法非常相似,这两种语言提供非常类似的功能。此外,你会发现 C# 的特有功能,这些功能将帮助你轻松进行开发工作。 概述 本文介绍面向 Java 开发人员的 C# 编程,主要侧重于在开发 Xamarin....

【C#】unsigned char类型

1、在C#中char是16位的;C++中的char是8位的。 unsigned char类型可以用byte类型代替。 2、 byte b = 1; byte b = Convert.ToByte(1);//这两种写法一样,相当于unsigned char=1 byte b = Convert.ToByte('1');//相当于unsigned char=...

webpack 5 与 webpack-dev-server 3兼容性问题

说明:这里使用的是webpack: "^5.9.0",webpack-cli: "^4.2.0",webpack-dev-server: "^3.11.0" 问题1:通过 npx webpack-dev-server 启动项目失败,报错:Error: Cannot find module 'webpack-cli/bin/config-yargs' 解决...