当前位置: 首页 > news >正文

关于 C# 中的 as 关键字

昨天,突然之间,看到 as 关键字,发现自己居然没有见过。于是查了下,发现原来它也是类型转换方面的,但是和 cast 有些不相同,所以把他列出,供各位参考,下面是转msdn文档的

关键的一句,也是最最有用的一句话
【 注意,as 运算符只执行引用转换和装箱转换。as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用 cast 表达式来执行。】



C# 语言参考
as(C# 参考)

用于在兼容的引用类型之间执行转换。例如:

复制代码
string s = someObject as string;
if (s != null)
{
// someObject is a string.
}
<script type="text/Javascript"> var ExpCollDivStr = ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl07fd4dbfd,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl07img,"; </script> 备注备注

as 运算符类似于强制转换操作;但是,如果转换不可行,as 会返回 null 而不是引发异常。更严格地说,这种形式的表达式

复制代码
expression as type

等效于

复制代码
expression is type ? (type)expression : (type)null

只是 expression 只被计算一次。

注意,as 运算符只执行引用转换和装箱转换。as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用 cast 表达式来执行。

<script type="text/Javascript"> var ExpCollDivStr = ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl10fbc663e,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl10img,"; </script> 示例示例
复制代码
// cs_keyword_as.cs
// The as operator.
using System;
class Class1
{
}

class Class2
{
}

class MainClass
{
static void Main()
{
object[] objArray = new object[6];
objArray[0] = new Class1();
objArray[1] = new Class2();
objArray[2] = "hello";
objArray[3] = 123;
objArray[4] = 123.4;
objArray[5] = null;

for (int i = 0; i < objArray.Length; ++i)
{
string s = objArray[i] as string;
Console.Write("{0}:", i);
if (s != null)
{
Console.WriteLine("'" + s + "'");
}
else
{
Console.WriteLine("not a string");
}
}
}
}

输出

0:not a string
1:not a string
2:'hello'
3:not a string
4:not a string
5:not a string
<script type="text/Javascript"> var ExpCollDivStr = ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl1239242ce,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl12img,"; </script> C# 语言规范C# 语言规范

有关更多信息,请参见 C# 语言规范中的以下各章节:

  • 6 转换

  • 7.9.10 as 运算符

 

相关文章:

  • [ 转载 ] SharePoint 资料
  • SharePoint 2007 的开发电子书籍和下载地址
  • Email邮件头揭密
  • Exchange Web Services and Internet Message Headers
  • 奥运门票网站瘫痪给了我很深刻的启示……
  • HOWTO: EWS: Use GetAttachment to download attachments off Mail/Appointment
  • 使用 .NET 2.0 SecureString 类保护敏感数据
  • PowerShell的CmdLet开发的HelloWorld
  • Windows PowerShell学习笔记之一——命令帮助
  • C#的String.Format格式化举例(转)
  • .net(C#)中String.Format如何使用
  • ASP.net中名称以无效字符开头问题解决?
  • log4net简易配置--
  • c开发 一个关于访问性的问题
  • FCKedit(asp.net)详细配置以及下载
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • @angular/forms 源码解析之双向绑定
  • canvas 五子棋游戏
  • CSS 三角实现
  • Java IO学习笔记一
  • JS+CSS实现数字滚动
  • React16时代,该用什么姿势写 React ?
  • React的组件模式
  • vue:响应原理
  • 聚类分析——Kmeans
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 坑!为什么View.startAnimation不起作用?
  • 力扣(LeetCode)21
  • 面试遇到的一些题
  • 自定义函数
  • AI算硅基生命吗,为什么?
  • C# - 为值类型重定义相等性
  • hi-nginx-1.3.4编译安装
  • 数据可视化之下发图实践
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #每天一道面试题# 什么是MySQL的回表查询
  • %check_box% in rails :coditions={:has_many , :through}
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (2022 CVPR) Unbiased Teacher v2
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (SpringBoot)第二章:Spring创建和使用
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (南京观海微电子)——COF介绍
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (五)网络优化与超参数选择--九五小庞
  • (转)负载均衡,回话保持,cookie
  • (状压dp)uva 10817 Headmaster's Headache
  • .Net FrameWork总结
  • .net mvc部分视图
  • .net 简单实现MD5
  • .NET/C# 使窗口永不获得焦点
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .net访问oracle数据库性能问题
  • .NET和.COM和.CN域名区别