不能忽略c#中的using和as操作符的用处

是不是很多人不用c#中的using和as操作符?甚至不知道? 
其实这2个操作符在小处非常有用。

1、using 
按照msdn的解释

using 语句定义一个范围,在此范围的末尾将处理对象。 
举例:

class TestUsing:IDisposable 
    { 
        public void Dispose()  
        { 
            Console.WriteLine("Dispose");  
        }

public void Method() 
        { 
            Console.WriteLine("Do a method"); 
        } 
    } 
调用这个类:

using(TestUsing tu=new TestUsing()) 
            { 
                tu.Method(); 
            } 
可以看到先后输出了Do a method和Dispose。 
备注:实例化的对象必须实现 System.IDisposable 接口

2、as 
msdn这么说:

as 运算符用于执行可兼容类型之间的转换。 
as 运算符类似于类型转换,所不同的是,当转换失败时,as 运算符将产生空,而不是引发异常。在形式上,这种形式的表达式:

expression as type 
等效于:

expression is type ? (type)expression : (type)null 
只是 expression 只被计算一次。

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

举例: 
object [] arr=new object[2]; 
            arr[0]=123; 
            arr[1]="test"; 
            foreach(object o in arr) 
            { 
                string s=(string)o; 
                Console.WriteLine(s); 
            } 
这样的代码在转换类型失败的时候引发异常,代码修改成: 
object [] arr=new object[2]; 
            arr[0]=123; 
            arr[1]="test"; 
            for(int i=0;i<arr.Length;i++) 
            { 
                string s=arr[i] as string; 
                if(s!=null)Console.WriteLine(i+":"+s); 
            } 可以看到输出了1:test,虽然arr[0]处转换失败但是没有引发异常而是返回了null

备注:as必须和引用类型一起使用(int等值类型不能使用)

(0)

相关推荐

  • MYSQL ERROR 1045 (28000): Access denied for user (using password: YES)问题的解决

    第一种方法: 推荐错误描述: Mysql中添加用户之后可能出现登录时提示ERROR 1045 (28000): Access denied for user的错误. 原因分析: 在mysql.user表中可能出现user为空的记录,如: mysql> select host,user from user; +------------------+------+ | host | user | +------------------+------+ | % | test | | localhost

  • C#中using指令的几种用法

    C#中using指令的用法 1.using指令 using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到. 例如: using System; using System.Data; 2.using别名 using + 别名 = 包括详细命名空间信息的具体的类型. 这种做法有个好处就是当同一个cs引用了两个不同的命名空间,但两个命名空间都包括了一个相同名字的类型的时候.当需要用

  • C++ using namespace std 用法深入解析

    一 :<iostream>和<iostream.h>是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的. 后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h. 因此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就

  • C# using三种使用方法

    C# using 三种使用方式介绍 1.using指令.using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到. 例如:using System; 一般都会出现在*.cs中. 2.using别名.using + 别名 = 包括详细命名空间信息的具体的类型. 这种做法有个好处就是当同一个cs引用了两个不同的命名空间,但两个命名空间都包括了一个相同名字的类型的时候.当需要用到这

  • Tomcat ssl报错Connector attribute SSLCertificateFile must be defined when using SSL with APR解决方法

    今天同事要求帮忙配置tomcat ssl,直接把linux下tomcat配置ssl这篇文章发给他了,没想到他居然说启动tomcat的时候,报Connector attribute SSLCertificateFile must be defined when using SSL with APR的错误,马上跑过去看,原来他的tomcat版本是7.0的,我发给他的是tomcat6的,检查了key,检查了配置文件,因为他直接复制的我发他文章的配置,折腾了2-3个小时,终于把问题给解决了. 系统:wi

  • C#中using的三种用法

    using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型. 为命名空间创建别名. using 关键字还用来创建 using 语句  定义一个范围,将在此范围之外释放一个或多个对象. 请参见 using 语句.http://www.yaosansi.com/blog/article.asp?id=669 using namespace; using alias = type|namespace;  参数 Alias  您希望用来表示命名空间或类型的用户定义符号

  • JS中简单的实现像C#中using功能(有源码下载)

    先看看使用页面是如何调用的. 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  <html xmlns="http://www.w3.org/1999/xhtml">   <head>   <title> 

  • 找不到类型或命名空间名称“Server”(是否缺少 using 指令或程序集引用?)

    今天将webserice里面的一个代码,拷到一个C#类,结果运行编译错误.DataBase = Server.MapPath("data.mdb");报错:找不到类型或命名空间名称"Server"(是否缺少 using 指令或程序集引用?) 但是我的确引用了名字空间using System.Web;为什么呢?因为Server的完整路径是System.Web.HttpContext.Current.Server.using System.Web是显然不够的:但是在从内

  • mysql Access denied for user ‘root’@’localhost’ (using password: YES)解决方法

    今天在启动mysql时出现以下问题: [root@www ~]# mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 网上的答案是各种各样的,最终解决问题的方法总结为以下,好多都是没有设置初始密码造成此问题的. 解决方法如下: [root@www ~]# service mysqld stop #先关闭mysql服务

  • 谈C# using的用法与好处

    之前的一篇文章中的代码中有一个using的用法,刚开始查看了一些资料说是强制关闭对象的一个命令.今天又查了一些资料,才明白,原来using指令调用了一个方法--Dispose()方法.而Dispose()方法的作用就是释放所有的使用资源. 例: public void ExecuteCommand( string connString, string commandString ) { SqlConnection myConnection = new SqlConnection( connStr

随机推荐