C#类型转换

C#类型转换

隐式类型转换

类型转换从根本上说是类型铸造,或者说是把数据从一种类型转换为另一种类型。在 C# 中,类型铸造有两种形式:

隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。

 int inum = 100;
 long lnum = inum; // 进行了隐式转换,将 int 型(数据范围小)数据转换为了 long 型(数据范围大)的数据
 Class1 c1 = new Class2(); // 这里也是隐式转换,将一个新建的 Class2 实例转换为了其基类 Class1 类型的实例 C1

显式类型转换 - 显式类型转换,即强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。【注:使用as可以进行显式转换】

在这里插入图片描述
在这里插入图片描述

C# 常见显式转换方法总结对比

Convert.ToInt32() 、int.TryParse() 和 int.Parse() 、(int)的区别

1)对于转换对象

Convert.ToInt32() 可以为多种类型(除数字类型外 bool,string,DateTime 等)

int.TryParse() 和 int.Parse() 只能是整型字符串类型(即各种整型 ToString() 之后的形式,不能为浮点型,否则 int.Parse() 就会出现输入的字符串格式不正确的错误,int.TryParse() 也会返回 false,输出参数为 0

(int)只能是数字类型(例 float,int,uint等)

2)对于空值 NULL

从运行报错的角度讲,(int) 强制转换和 int.Parse() 都不能接受 NULL【会报异常】

Convert.ToInt32() 其实是在转换前先做了一个判断,参数如果为 NULL,则直接返回 0【不会报异常】,否则就调用 int.Parse() 进行转换

int.TryParse() 其实是对 int.Parse() 做了一个异常处理,如果出现异常则返回 false,并且将输出参数返回 0

3)针对于浮点型的取舍问题

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

4)关于溢出

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

如此可见,我们在进行数据转换前选择转换方法要谨慎!

如果是数字类型可以考虑直接用(int)强制转换,
如果是整型字符串类型的,考虑用 int.Parse() 进行转换,
如果不是这两种类型,再考虑用 Convert.ToInt32() 进行转换。

程序代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Test
    {
        static void Main(string[] args)
        {
            //Console.WriteLine("Size of int: {0}", sizeof(Char));
            //Console.ReadLine();

            //示例1:
            string locstr = 4567.ToString();
            //方法一:用Convert
            int i = Convert.ToInt16(locstr);
            //方法二:用Parse
            int ii = int.Parse(locstr);
            Console.WriteLine(locstr);
            Console.WriteLine(i);
            Console.WriteLine(ii);
            Console.WriteLine();
            

            //示例2:
            //该方式也是将数字内容的字符串转换为int类型,
            //但是该方式比int.Parse(string s) 好一些,它不会出现异常,最后一个参数result是输出值,
            //如果转换成功则输出相应的值,转换失败则输出0。 
            string s1 = "abcd";
            string s2 = "1234";
            int a, b;
            bool bo1 = int.TryParse(s1, out a);
            Console.WriteLine(s1 + " " + bo1 + " " + a);
            bool bo2 = int.TryParse(s2, out b);
            Console.WriteLine(s2 + " " + bo2 + " " + b);
            Console.WriteLine();

            //示例3:
            //C# 中对 double 类型的数据取整,可以使用 convert.toint32() 方法,也可使用 int 强制转换为整数,
            //使用 int 时并不存在四舍五入的情况,而是直接将后面的小数位数丢掉。比如:
            double c = 1.35;
            double d = 1.65;
            int c1 = Convert.ToInt32(c);
            int c2 = (int)(c);
            int d1 = Convert.ToInt32(d);
            int d2 = (int)(d);
            Console.WriteLine("{0}使用convert方法转化的结果为:{1}", c, c1); //输出1
            Console.WriteLine("{0}使用int强制转换的结果为:{1}", c, c2);   //输出1
            Console.WriteLine("{0}使用convert方法转化的结果为:{1}", d, d1);   //输出2
            Console.WriteLine("{0}使用int强制转换的结果为:{1}", d, d2);   //输出1
            
            Console.ReadLine();
        }
    }
}

运行结果

在这里插入图片描述

相关推荐

  1. C++的类型转换

    2024-03-19 02:18:02       22 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-19 02:18:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-19 02:18:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-19 02:18:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-19 02:18:02       20 阅读

热门阅读

  1. Node.js

    Node.js

    2024-03-19 02:18:02      25 阅读
  2. Android FrameWork基础之Makefile

    2024-03-19 02:18:02       25 阅读
  3. Flutter第五弹:Flutter布局

    2024-03-19 02:18:02       26 阅读
  4. vue触发真实的点击 事件 跟用户行为一致

    2024-03-19 02:18:02       21 阅读
  5. 【概率论中的两种重要公式:全概率和贝叶斯】

    2024-03-19 02:18:02       25 阅读
  6. python教程——把视频转成gif

    2024-03-19 02:18:02       23 阅读
  7. ubuntu20.04 创建ros环境、创建rospackage

    2024-03-19 02:18:02       22 阅读
  8. 【兆易创新GD32H759I-EVAL开发板】 LUT功能

    2024-03-19 02:18:02       24 阅读
  9. Yarn面试重点

    2024-03-19 02:18:02       22 阅读
  10. 感情复盘--

    2024-03-19 02:18:02       19 阅读
  11. IOS面试题object-c 121-125

    2024-03-19 02:18:02       19 阅读
  12. n个猴子报数

    2024-03-19 02:18:02       20 阅读