解析C#中is和as操作符的用法 two

c# 中 is和as 操作符是用来进行强制类型转换的

is : 检查一个对象是否兼容于其他指定的类型,并返回一个Bool值,永远不会抛出异常

 

 object o = new object();  
 
if (o is Label)  
 {       
    Label lb 
= (Label)o;       
    Response.Write(
"类型转换成功"); 
 }  
 
else 
 {      
     Response.Write(
"类型转换失败");  
 } 

 

 

在上面的代码,CLR实际上会检查两次对象的类型,is操作符先核实一次,如果o兼容于Lable,那么在(Label)o时会再次核实一次,效率比较低,不建议使用

as:与强制类型转换是一样的,但是永远不会抛出异常,即如果转换不成功,会返回null

 

  object o = new object(); 
  Label lb 
= o as Label;    
  
if (lb == null)   
  {       
   Response.Write(
"类型转换失败");  
  }   
  
else  
  {   
   Response.Write(
"类型转换成功");
  } 

 

 

在上面的代码中,CLR只会进行一次类型核实,效率要高于 is

在学习C#时,看到这样一种表达方式:

 

 

 BAP_USER user = session["User"as BAP_USER; 
 
if(user == null)     
 
return mapping.FindForward("error"); 

 

 

有些不明白,上网查了些资料,对is和as操作符有了些了解,把资料放在这里供学习和参考:

在C#中,所有的东西都是对象。因此任何常数也是一个整型对象。这里用到了as ,as 是C#语言里面的一个关键字。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操作符转换的两种方式,is需要做两次对象的类型检查,而as需要做一次对象类型检查,再加一次null的检查,而null检查开销比对象类型检查少。相对as的方法效率高些。

 

转载于:https://www.cnblogs.com/jhxk/articles/1739177.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java跨函数跳转_VS code 函数无法跨文件跳转到定义

现状:本文件函数通过this打点调用的函数,引入绝对路径的文件,调用的函数都可以通过Ctrl 点击 实现跳转到定义处。而如果在 webpack 通过alias 设置了别名,无法跳转成功。解决方案: 新建文件 jsconfig.json,配置如下。…

uname命令

uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。 语法 uname(选项) 选项 -a或--all:显示全部的信息; -m或--machine:显示电脑类型; -n或-nodename:显示在…

std::map用法总结

给出了map的基本用法如插入、查找、删除、遍历等等,同时告诉你如何实现双键map,包括 (1) 只有两个键都匹配才命中目标(2) 两个键中任意一个匹配就命中目标 可以扩展到多键(一) 介绍特点:1.map将Key的object和T的Object绑定到一起,…

题库 java_java题库

1.public class T {int squares81;public static void main(String[] args) {new T().go();}void go(){incr(squares);System.out.println(squares);}void incr(int squares){squares10;}返回值为82,没有改变squares的值,不是引用传递不是c2.建个test类 …

Javascript弹出div层

这是一个DIV弹窗效果!将鼠标移动到此 点击这里查看弹出窗口 这是文章“JavaScript弹出窗口DIV层效果代码”的演示页面,点这里查看原文! 转载于:https://www.cnblogs.com/xxxxx/archive/2010/05/22/1741707.html

java什么是同步_什么是同步?什么是互斥?

现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能:都需要访问/使用同一种资源 多个任务之间有依赖关系,某个任务的运行依赖于另一个任务 这两种情形是多任务编程中遇…

python enumerate()

描述 enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。 语法 以下是 enumerate() 方法的语法: enumerate(sequence, [start0]) 参数 sequence -- 一个序列、迭代器…

java做报表_一步一步使用POI做java报表

读取和重写 WorkbooksPOIFSFileSystem fs new POIFSFileSystem(new FileInputStream("workbook.xls"));HSSFWorkbook wb new HSSFWorkbook(fs);HSSFSheet sheet wb.getSheetAt(0);HSSFRow row sheet.getRow(2);HSSFCell cell row.getCell((short)3);if (cell nu…

为考试而准备1——无线WCDMA 网规精选(04年)

2010年的网优注定将与大大小小的考试紧密相联,而考试的侧重方面于3G为主。 一、填空题 1. BSC6800可以提供单机柜解决方案,单机柜可以支持 3200 等效语音信道,支持6万 等效语音用户。BSC6800每块WFMR板处理 16 个载频扇区,每个载频…

SQL的数据定义功能及语句:

定义各种数据库的“对象” 模式定义表定义视图定义索引定义SQL的数据定义语句 操作对象操作方式创建删除修改 模式CREATE SCHEMADROP SCHEMA 表CREATE TABLEDROP TABLEALTEB TABLE 视图CREATE VIEWDROP VIEW 索引CREATE INDEXDROP INDEXALTEB INDEX 转载于:https://www.cnbl…

java程序转成mac应用,如何为Java应用程序创建Mac安装程序?

I have created an executable JAR file for my Java application. If I double-click then it works fine. But I want to create installer for Mac OS, because I cannot give a JAR file to my users. Any suggestions?解决方案Well, all you have to do here is to creat…

java 怎么页面授权访问_Java调用Linkedin接口API之:获取授权

配置领英应用配置地址:https://www.linkedin.com/secure/developer?newapp强烈建议您使用 HTTPS网址必须是绝对网址 (例如: “https://example.com/auth/callbac”,而不是“/auth/callback”)网址参数会被忽略 (即 https://example.com/?id1 与 https:…

【转载】别了,摩托罗拉(十):“战争部落”和“独立王国”

摩托罗拉于1928年由保罗高尔文(Paul V. Galvin)及其兄弟约瑟夫高尔文(Joseph Galvin)创建,最初是一家汽车收音机小厂,兄弟二人将其发展为对讲机、彩色电视机生产巨头.罗伯特高尔文(Robert L. Galvin)继承了父亲和叔叔的衣钵,在任摩托罗拉CEO的27年间,进入半导体和无线通信行业,…

java orika_常见Bean映射工具分析评测及Orika介绍

Bean映射工具选择工作中,我们经常需要将对象转换成不同的形式以适应不同的api,或者在不同业务层中传输对象而不同分层的对象存在不同的格式,因此我们需要编写映射代码将对象中的属性值从一种类型转换成另一种类型。进行这种转换除了手动编写大…