C# is与as

时间:2023-03-09 19:04:34
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. 如何寻找设计灵感?写给刚入行的设计师(转自UI中国)

    如何寻找设计灵感?写给刚入行的设计师 如何寻找设计灵感? 这一次的文章,我想和大家聊聊年轻的设计师在没有那么多经验的情况下如何寻找设计师灵感.(希望这篇文章也能帮助感同身受的你) 每个设计师对设计都有 ...

  2. HDU 4422 The Little Girl who Picks Mushrooms

    题意:一共有5座山,已知小女孩在n座山采了n篮蘑菇,如果n小于5则在其他的山里采了任意重量的蘑菇,给出每篮蘑菇的重量,她回去的时候会遇到仨女巫要她交出三篮蘑菇的重量和恰好为1024的倍数,否则就把她的 ...

  3. 翻译【ElasticSearch Server】第一章:开始使用ElasticSearch集群(1)

    我们要做的第一件事是安装ElasticSearch.对于多数应用程序,您开始安装和配置,通常忘记这些步骤的重要性,直到发生了糟糕的事情.这章我们将广泛关注ElasticSearch的这部分.请注意本章 ...

  4. codeforces 675D Tree Construction set

    转自:http://blog.csdn.net/qwb492859377/article/details/51447350 #include <stdio.h> #include < ...

  5. 【剑指offer 面试题21】包含min函数的栈

    思路: 通过增加一个辅助栈保存每个状态对应的最小值.栈实现的不完整,应该还包含empty()等常规函数. #include <iostream> #include <stack&gt ...

  6. Struts2动态调用DMI及错误解决方法

    在Strust2中action可以定义自己的方法,调用方法有两种方式,一种方式是struts.xml中指定method来表示需要用到的方法, 但是这种方法缺点在于如果你的Action中有很多方法则要多 ...

  7. Google Maps API显示地图的小示例

    来源:http://www.ido321.com/1089.html 效果(新版Firefox中测试): 代码: <!DOCTYPE> <html> <head> ...

  8. 分析特定类的python脚本

    今天接触了下pyUSB,事先没看对象内部成员资料,直接用python的dir函数看了看pyUSB的内部构成.突然间想到自己可不可以写个简单的脚本,利用dir或其他函数遍历某个对象内部的所有成员,并打印 ...

  9. MFC特定函数的应用20160720(SystemParametersInfo,GetWindowRect,WriteProfileString,GetSystemMetrics)

    1.SystemParametersInfo函数可以获取和设置数量众多的windows系统参数 MFC中可以用 SystemParametersInfo(……) 函数来获取和设置系统信息,如下面例子所 ...

  10. C# 与 VC Dll 传输信息

    考虑: 使用string类型传送: 在VC Dll中解析字符: 使用 string 类型将解析的类型传送到C#程序中: 建立VC解析的函数,提高代码可重用性