zoukankan      html  css  js  c++  java
  • <转>强制类型转换总结

    View Code
    对于强制转换,先举几个例字说明:

    1

    long longType = 100;
    int intType = longType;// 错误,需要使用显式强制转换
    int intType = (int)longType;//正确,使用了显式强制转换

    2

    string stringType = "12345";
    int intType = (int)stringType;//错误,string类型不能直接转换为int类型
    int intType = Int32.Parse(stringType);//正确

    3

    long longType = 100;

    string stringType = "12345";

    object objectType = "54321";

    int intType = Convert.ToInt32(longType);//正确

    int intType = Convert.ToInt32(stringType);//正确

    int intType = Convert.ToInt32(objectType);//正确

    4

    double doubleType = Int32.MaxValue + 1.011;

    int intType = (int)doubleType;//虽然运行正确,但是得出错误结果

    int intType = Convert.ToInt32(doubleType);//抛出 OverflowException 异常



    先总结一下(xxx)和xxx.Parse(),Convert.xxx()三者的区别:

    (
    int)转换:用在数值范围大的类型转换成数值范围小的类型时使用,但是如果被转换的数值大于或者小于数值范围,则得到一个错误的结果,利用这种转换方式不能将string转换成int,会报错。

    Int32.Parse(),转换:在符合数字格式的string到int类型转换过程中使用,并可以对错误的string数字格式的抛出相应的异常。

    Convert.ToInt32()转换:使用这种转换,所提供的字符串必须是数值的有效表达方式,该数还必须不是溢出的数。否则抛出异常。



    关于as和is:

    as 运算符类似于类型转换,所不同的是,当转换失败时,as运算符将产生空,而不是引发异常。在形式上,这种形式的表达式:
    expression_r
    as type
    as运算符只执行引用转换和装箱转换。
    as运算符无法执行其他转换,如用户定义的转换,这类转换应使用case表达式来代替其执行。
    关于is的其实也差不多,只是IS不会帮你进行任何的转换。所以需要自已进行显示转换。
    is操作符进行转换,它自动检查时局是否和类型兼容,并返回结果。而且它不会抛出异常。如果对象引用为null,则is总返回false。

    is例子:

    if (cls1 is Class2)
    Class2 cls2
    = (Class2)cls1;
    else
    System.Console.WriteLine(
    "Error 2!");

    as例子:

    Class2 cls2
    = cls1 as Class2;
    if (cls2!=null)
    System.Console.WriteLine(
    "Ok");
    else
    System.Console.WriteLine(
    "Error!");
    补充:对比两种方式,is需要做两次对象的类型检查,而as需要做一次对象类型检查,再加一次null的检查,而null检查开销比对象类型检查少。相对as的方法效率高些。
  • 相关阅读:
    HDU 6143 Killer Names【dp递推】【好题】【思维题】【阅读题】
    HDU 6143 Killer Names【dp递推】【好题】【思维题】【阅读题】
    POJ 3974 Palindrome【manacher】【模板题】【模板】
    POJ 3974 Palindrome【manacher】【模板题】【模板】
    HDU 6127 Hard challenge【计算机几何】【思维题】
    HDU 6127 Hard challenge【计算机几何】【思维题】
    HDU 6129 Just do it【杨辉三角】【思维题】【好题】
    HDU 6129 Just do it【杨辉三角】【思维题】【好题】
    HDU 3037 Saving Beans【Lucas定理】【模板题】【模板】【组合数取余】
    8.Math 对象
  • 原文地址:https://www.cnblogs.com/midcn/p/2031042.html
Copyright © 2011-2022 走看看