zoukankan      html  css  js  c++  java
  • C#中的is和as

    需要检查一个实例的类型时,一般都使用强制转换操作:

    C# 代码
    bool CheckIsType(object source)
    ...{
    try
    ...{
    TagClass result
    = (TagClass)source;
    return true;
    }

    catch
    ...{
    return false;
    }

    }

    后来发现了object.GetType(),但是很难去判断实例的类型是否兼容。现在我向大家推荐is和as运算符.

    is 检查对象是否与给定类型兼容。

    as 运算符用于在兼容的引用类型之间执行转换。

    为什么推荐给各位:

    as 运算符类似于强制转换操作。如果无法进行转换, as 返回 null ,而强制转换会引发异常。

    有些情况下我们也只是想判断类型,没有必要去做转换,那么我们就可以用is了。

    以下是as的例子(代码引用自MSDN):

    C# 代码
    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");
    }

    }

    }

    }



    以下是is的例子(代码引用自MSDN):

    using System;
    class Class1
    ...{
    }


    class Class2
    ...{
    }


    class IsTest
    ...{
    static void Test(object o)
    ...{
    Class1 a;
    Class2 b;

    if (o is Class1)
    ...{
    Console.WriteLine(
    "o is Class1");
    a
    = (Class1)o;
    // Do something with "a."
    }

    else if (o is Class2)
    ...{
    Console.WriteLine(
    "o is Class2");
    b
    = (Class2)o;
    // Do something with "b."
    }

    else
    ...{
    Console.WriteLine(
    "o is neither Class1 nor Class2.");
    }

    }

    static void Main()
    ...{
    Class1 c1
    = new Class1();
    Class2 c2
    = new Class2();
    Test(c1);
    Test(c2);
    Test(
    "a string");
    }

    }
  • 相关阅读:
    [转]国内源码下载类网站
    JS 异步处理机制的几种方式(转)
    NodeJS 服务器基本模板
    JS Ajax的error函数(转)
    CSS 文本溢出部分显示省略号
    .net网络编程之一:Socket编程
    在.NET使用JSON作为数据交换格式
    在web.config和app.config文件中增加自定义配置节点
    C#的解题思路(1):不重复随机数的产生问题
    用C#绘制实时曲线图
  • 原文地址:https://www.cnblogs.com/leeolevis/p/1383130.html
Copyright © 2011-2022 走看看