C#中数据类型的安全转换(is,as)

原文 C#中数据类型的安全转换(is,as)

下面代码中,不能装箱,在强制类型转换时出错,因为之前 c 是 class 类型,而却要把它转换为 int 类型,这是不可以的。虽然编译器能通过编译,但是 runtime 在运行时会抛出 InvalidCastException 异常。

    Circle c = new Circle(8);
    object o = c;   // 本条语句正确,但是不会装箱,因为装箱是从栈到堆,需要的是值类型,而 c 是引用类型
    int i = (int)o; // 编译成功
                    // 编译器编译通过,但是运行时 runtime 会抛出一个 InvalidCastException

is 和 as 是 C# 提供的以安全的方式执行类型强制转换的操作符,用法如下。

is 操作符验证对象的类型是不是自己希望的。

    WrappedInt wi = new WrappedInt();
    object o = wi;
    if (o is WrappedInt)
    {
        WrappedInt temp = (WrappedInt)o;    // 转型是安全的,o 已确定是一个 WrappedInt
    }

  as 操作符取一个对象和一个类型作为其左边和右边的操作数。

  runtime 会尝试将对象转换成指定的类型,若转换成功,就返回转换成功后的结果给 temp,如果转换失败,返回 null 给 temp。

    WrappedInt wi = new WrappedInt();
    object o = wi;
    WrappedInt temp = o as WrappedInt;    // 转型是安全的,o 已确定是一个 WrappedInt
    if (temp != null)
    {
        // 只有转换成功,这里的代码才能被执行
    }
时间: 2024-10-11 04:59:58

C#中数据类型的安全转换(is,as)的相关文章

Java中数据类型及其之间的转换

Java中数据类型及其之间的转换 基本的数据类型 基本类型有以下四种: 1)int长度数据类型有:byte(8bits).short(16bits).int(32bits).long(64bits). 2)float长度数据类型有:单精度(32bits float).双精度(64bits double),JAVA中将小数默认为double类型,若要定义float需在数据后面用f声明: 3)boolean类型变量的取值有:ture.false 4)char数据类型有:unicode字符,16位 对

Java中数据类型的转换

Java中的数据类型在定义时其实就已经确定了,所以是不能随意转换成其它的数据类型的.我们只能在一定程度上对其做类型转换的处理.转换的方式有 “自动类型转换”和“强制类型转换”两种. ①数据类型的自动转换: 假若在程序中定义好数据类型变量以后,又想用另一种数据类型来表示.Java只有在下列的条件都满足的情况下,才会做出数据类型的转换: 1.转换前的数据类型与转换后的类型兼容,也就是说只能是同一种数据类型,要么都是数值型,要么都是字符类型的: 2.转换后的数据类型表示范围比转换前的类型表示的范围大.

Java中数据类型及其之间的转换(转)

Java中数据类型及其之间的转换 基本的数据类型 基本类型有以下四种: 1)int长度数据类型有:byte(8bits).short(16bits).int(32bits).long(64bits). 2)float长度数据类型有:单精度(32bits float).双精度(64bits double),JAVA中将小数默认为double类型,若要定义float需在数据后面用f声明: 3)boolean类型变量的取值有:ture.false 4)char数据类型有:unicode字符,16位 对

java中的、标识符、运算符以及数据类型之间的转换。

---恢复内容开始--- 数据类型之间的转换: 1:自动转换:就是不用说出要转换成什么类型,由java中的虚拟机自动将小数据类型转换成大数据类型,但大数据中的数据精度有可能被破坏. 2:强制转换:强制转换的格式是在需要转型的数据前加上"( )",然后在括号内加入需要转化的数据类型.有的数据经过转型运算后,精度会丢失,而有的会更加精确. 例子: public class Demo { public static void main(String[] args){ int x; doubl

C#中常见数据类型之间的转换

c#语言中常见的数据类型有char(字符类型).string(字符串类型).int(整数类型).double(小数类型).此处浅谈一下任意类型与string类型.int类型与double类型.string与数字类型的转换. 1.任意类型转换为string类型 转换代码:待转换的数据.ToString(); 返回数据类型:string eg:int a = 10; String b = a.ToString(); 将整数类型a转换为string类型b 2.int类型与double类型之间的互换 此

浅谈C#语言中的各种数据类型,与数据类型之间的转换

什么是数据类型? 数据类型,百度百科是这样解释的:数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作.这样的解释对于一个初学者来说未必太过于深奥. 简单点说,数据类型就是不同长度的数据的归类.数据类型的出现就是为了解决计算机中对不同长度的数据合理保存的问题.为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存.达到资源合理优化利用,减少浪费内存的目的. 数据类型有哪些? 类型            描述            

java中的进制转换

进制转换 首先是十进制转化为其他进制,如二进制,八进制,十六进制: 它们在java中都有专门的函数可供调用: 如:十进制转化为二进制时调用toBinaryString(); 十进制转化为八进制时调用toOctalString(); 十进制转化为十六进制时调用toHexString(); 代码实现: // 进制转化 public class Main_2 { public static void main(String[] args) { Integer a=new Integer(20); //

关于JAVA变量,数据类型,基本数据类型之间的转换和对象型的基本数据类型

如何给java变量取名字-----标示符     标示符是用来给类,对象,方法,变量,接口和自定义数据类型命名的.凡是可以自己取名字的地方都叫做标示符,都要遵循标示符的规则. 标示符的规则:1.由数字,字母和下划线(_),美元符号($)组成. 2.区分大小写,首字母不能数字,长度无限制. 3.不能与java关键字重名. java常用数据类型(基本类型和引用类型) 基本数据类型: 基本数据类型分为数值类型和非数值类型.其中数值类型包括整数类型和非整形.非数值类型包括,字符类型,布尔类型, 整型包括

深入理解Scala中的隐式转换系统

博客核心内容: 1.Scala中的两种隐式转换机制以及隐式视图的定义方式 2.Scala中的隐式绑定可能所处的位置以及如何更好的使用隐式转换 3.Scala中的隐式转换相关操作规则 4.Scala中的隐式参数 5.Scala中的隐式类 6.Scala中的隐式对象 7.Scala中的两种隐式类型约束(结合Scala中的类型系统) 8.Predef类中的implicitly方法的用法介绍以及Ordering类型转化为Oredered类型的方式 1.Scala中的两种隐式转换机制以及隐式视图的定义方式