zoukankan      html  css  js  c++  java
  • C# 中as 与 is的用法及区别

    一、类型转换

    1.任何类型都可以转换为其基类类型,用隐式转换完成;
    2.任何类型转换为其派生类型时,必须进行显示转换。如:(类型名)对象名;
    3.使用GetType可以取得任何对象的精确类型;
    4.基本类型可以使用Convert类实现类型转换;
    5.除了string以外的其他类型都有Parse方法,用于将字符串类型转换成对应的基本类型;
    6.值类型和引用类型的转换称为装箱(boxing)或拆箱(unboxing);

    二、is/as示例

    is转换规则:

    1. 检查对象类型的兼容性,并返回结果true(false);
    2.不会抛出异常;
    3.如果对象为null,刚返回false;

    示例:

    C#代码 复制代码
    1. object o = "abc";   
    2. if (o is string//执行第一次类型兼容性检查   
    3. {   
    4.     string s = (string)o; //执行第二次类型兼容性检查,并转换   
    5.     MessageBox.Show("转换成功!");   
    6. }   
    7. else  
    8. {   
    9.     MessageBox.Show("转换失败!");   
    10. }  
        object o = "abc";
        if (o is string) //执行第一次类型兼容性检查
        {
            string s = (string)o; //执行第二次类型兼容性检查,并转换
            MessageBox.Show("转换成功!");
        }
        else
        {
            MessageBox.Show("转换失败!");
        }
    


    as转换规则:

    1.检查对象类型的兼容性,并返回转换结果,如果不兼容则返回null;
    2.不会抛出异常;
    3.如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常;

    示例:

    C#代码 复制代码
    1. object o = "abc";   
    2. string s = o as string//执行第一次类型兼容性检查,并返回结果   
    3. if (s != null)    
    4.     MessageBox.Show("转换成功!");   
    5. else  
    6.     MessageBox.Show("转换失败!");  
        object o = "abc";
        string s = o as string; //执行第一次类型兼容性检查,并返回结果
        if (s != null) 
            MessageBox.Show("转换成功!");
        else
            MessageBox.Show("转换失败!");
    


    注:as比is少执行一次兼容性检查,性能可能会高一点点。 
  • 相关阅读:
    leetcode Remove Linked List Elements
    leetcode Word Pattern
    leetcode Isomorphic Strings
    leetcode Valid Parentheses
    leetcode Remove Nth Node From End of List
    leetcode Contains Duplicate II
    leetcode Rectangle Area
    leetcode Length of Last Word
    leetcode Valid Sudoku
    leetcode Reverse Bits
  • 原文地址:https://www.cnblogs.com/zcy_soft/p/1977968.html
Copyright © 2011-2022 走看看