zoukankan      html  css  js  c++  java
  • C# 类型转换

    C#中数据转换的方法很多,拿将目标对象转换为整型(int)来讲,有四种方法:分别为(int)、int.Parse()、int.TryParse()和Convert.ToInt32()

    在我们实际开发项目的过程中,我们碰到需要被转换的类型大概有3大类,分别是空值(NULL)、数字类型(包含float,double,int,long等)和字符串(string)这3类。

    第一种情况:NULL

    int a = Convert.ToInt32(null);
    int b;
    bool rlt = int.TryParse(null, out b);
    int c = int.Parse(null);
    int d = (int)null;

    很明显,在运行之前VS就会在最后一句报错

    然后注释掉最后一句,再运行一下,发现这一句(int c = int.Parse(null);)会报如下错误:

    a和b分别返回0,rlt为false;

    总结:

    1. 对于空值NULL,从运行报错的角度讲,(int)强制转换和int.Parse()都不能接受NULL;
    2. Convert.ToInt32()其实是在转换前先做了一个判断,参数如果为NULL,则直接返回0;
    3. int.TryParse()其实是对int.Parse()做了一个异常处理,如果出现异常则返回false,并且将输出参数返回0;

    第二种情况:数字类型(主要测试double和long类型)

    double m = 1.232d;
    int a = Convert.ToInt32(m);
    int b;
    bool rlt = int.TryParse(m.ToString(), out b);
    int c = int.Parse(m.ToString());
    int d = (int)m;

    然后运行一下,发现这一句(int c = int.Parse(m.ToString());)会报错:

    注释掉这一句然后运行,然后查看返回值,a=1,b=0,rlt=false,d=1,

    将m的值修改为1.532d后再运行一次,查看结果为a=2,b=0,rlt=false,d=1;

    总结

    针对于浮点型的取舍问题,浮点型只有Convert.ToInt32()和(int)能进行转换,

    但是也是进行取舍了的,Convert.ToInt32()采取的取舍是进行四舍五入,而(int)则是截取浮点型的整数部分,忽略小数部分,例如Convert.ToInt32(1.499d)和(int)1.499d都返回1,Convert.ToInt32(1.5d)返回2,而(int)1.5d还是返回1;

    下面测试long类型,将代码修改为:

    long m = 9223372036854775807;
    int a = Convert.ToInt32(m);
    int b;
    bool rlt = int.TryParse(m.ToString(), out b);
    int c = int.Parse(m.ToString());
    int d = (int)m; 

    运行后发现(int a = Convert.ToInt32(m);)和(int c = int.Parse(m.ToString());)报错:

    其他返回结果b=0,rlt=false,d=-1;

    总结:

    将大的数据类型转换为小的数据类型时Convert.ToInt32()和int.Parse()都会报溢出错误,值对于Int32太大或太小,而(int)不报错,但是返回值为-1。

    第三种情况:字符串

    string m = "1.32";
    int a = Convert.ToInt32(m);
    int b;
    bool rlt = int.TryParse(m, out b);
    int c = int.Parse(m);
    int d = (int)m;

    发现最后一句(int d = (int)m;)报错:

    同样注释掉这句再运行,发现(int a = Convert.ToInt32(m);)和(int c = int.Parse(m);)均报如下的错误,只有将m的值修改为整型的字符串(如:”12”)才不会报如此错误

    总结:

    Convert.ToInt32()可以为多种类型(例出数字类型外bool,DateTime等),int.TryParse()和int.Parse()只能是整型字符串类型(即各种整型ToString()之后的形式,不能为浮点型,否则int.Parse()就会出现输入的字符串格式不正确的错误,int.TryParse()也会返回false,输出参数为0),(int)只能是数字类型(例float,int,uint等);

     

    原文链接:https://blog.csdn.net/alayeshi/article/details/79460312

  • 相关阅读:
    Servlet会话管理一(URL重写和表单隐藏域)
    Eclipse自动补全设置
    String类为什么设计成不可变的
    部署描述符(web.xml)和标注(annotation)
    html中   和空格的区别
    HTML的基本知识点
    Eclipse中配置Tomcat服务器并创建标准Web目录
    Sevlet处理HTML表单
    Servlet API
    Servlet开发的三种方法
  • 原文地址:https://www.cnblogs.com/zhaoyl9/p/13196583.html
Copyright © 2011-2022 走看看