C# is与as

1、使用场景:

  强制类型转换,有可能会导致异常。is与as就是为了解决这一问题,is与as永远不会抛出异常。

2、is判断一个对象是否兼容于指定的类型,考虑里氏代换。Dog是Animal,而Animal不是Dog。

3、as 与强制类型转换一样,区别是使用as是安全的。使用as如果转换失败,返回Null,不会抛出异常。

4、使用is和as可以取代强制类型转换,分别如下:  

 a、使用is
  if(a is Dog)
  {
    Dog d = (Dog)a;
    ...
  } b、使用as
  Dog d = a as Dog;
  if(d!=null)
  {
    ...
  }

  注意:二者效果一样,但是效率差别很大,使用is会检查两次对象的类型,一次是核实,一次是强制转换。使用as只进行了一次对象类型的检查。检查对象的类型,是个耗费资源的操作,首先要判断对象的实际类型,然后必须遍历继承树结构(层次结构),去与每个基类核对。

5、这个情况类似于C++的中map。在C++中,标准容器map的下标操作有一个危险的副作用,如果该键不存在,下标操作会插入一个具有该键的新元素,新元素的value使用默认构造方法。考虑下面的需求:根据key查找value,存在key,返回value,不存在key,返回null。为了避免出现上面的副作用,使用下面的办法:  

 a、使用count
  if(m.count(key)>)
  {
    return m[key];
  }
  else
  {
    return null;
  } b、使用find
  map<int,string>::iterator iter = m.find(key);
  if(iter!=m.end())
  {
    return *iter;
  }
  else
  {
    return null;
  }

  使用count,进行了两次查找。使用find只进行了一次查找。map 的内部实现使用了二叉树(AVL树或者红黑树),查找的时间效率为对数时间,会影响效率。因此,对于需求,根据key查找value,如果存在就使用,应该使用find。

随机推荐

  1. Solr 4&period;0 部署实例教程

    Solr 4.0 部署实例教程 Solr 4.0的入门基础教程,先说一点部署之后肯定会有人用solrj,solr 4.0好像添加了不少东西,其中CommonsHttpSolrServer这个类改名为H ...

  2. EXTJS动态改变store的proxy的params

    动态改变store的条件参数.var store = win.down('grid[name=sourceGrid]').getStore(); Ext.apply(store.proxy.extra ...

  3. BinaryWrite方法输出验证码

    在创建网站中验证码是不可或缺的.可以利用BinaryWrite输出二进制图像的方法输出验证码. 在开发图形验证码时,首先生成验证码,然后绘制成图像,最后通过该方法输出到页面中.所以熟练地掌握该方法可以 ...

  4. Nginx Location配置语法介绍、优先级说明

    nginx 语法规则:location   [=|~|~*|^~|!~|!~*]    /uri/   { … } location匹配的是$document_uri,$document_uri 会随 ...

  5. c语言利用指针计算字符串的长度

    可以用strlen函数,这里我们自己写一个. 注意:不能用scanf,scanf一遇到空格就认为输入结束.应该用gets(),遇到换行符或EOF结束.说明可以接受空格. #include<cst ...

  6. http header cache-control (request和response区别)

    摘要:(1)网络服务会根据 request的header中的 cache-control策略设置response的cache-control策略 1 response cache-control 和 ...

  7. 深入出不来nodejs源码-编译启动&lpar;1&rpar;

    整整弄了两天,踩了无数的坑,各种奇怪的error,最后终于编译成功了. 网上的教程基本上都过时了,或者是版本不对,都会报一些奇怪的错误,这里总结一下目前可行的流程. node版本:v10.1.0. 首 ...

  8. SQL Server进阶(七)集合运算

    概述 为什么使用集合运算: 在集合运算中比联接查询和EXISTS/NOT EXISTS更方便. 并集运算(UNION) 并集:两个集合的并集是一个包含集合A和B中所有元素的集合. 在T-SQL中.UN ...

  9. java接口中的继承

    java.util.concurrent包下的 public interface BlockingDeque<E> extends BlockingQueue<E>, Dequ ...

  10. java知识思维图解

上一篇:MySQL主从数据一致性问题修复


下一篇:sdram 裸机程序