zoukankan      html  css  js  c++  java
  • C# 数据类型转换 显式转型、隐式转型、强制转型

    C# 的类型转换有 显式转型隐式转型 两种方式。

    显式转型:有可能引发异常、精确度丢失及其他问题的转换方式。需要使用手段进行转换操作。

    隐式转型:不会改变原有数据精确度、引发异常,不会发生任何问题的转换方式。由系统自动转换。

     不同类型的数据进行操作(加减乘除赋值等等),是需要进行 类型转换 后,才能继续操作。所以需要“类型转换”。

    隐式转型

    隐式转型容易理解,当两种或多种数据类型进行某种操作时,不需要干预,系统会自动进行隐式转换。

            int i = 66666;
            long b = i;    //转为 long 类型后为 b 赋值
    

     通常情况下,多种 值类型 进行计算时,系统会自动进行隐式转型,并且总是转为范围更大的数据类型,并且不会发生精确度变化、数字大小变化等等。

    显式转型

    问题是,但你需要把一个 long 类型的数据转成 int 时,又或者让 string 与 int 互转,当数据小数点太多时,这时候就必须使用 显式转型。

    在继续下列教程前,要想说明一点。

    char 是整型!

    虽然char存储的是字符而不是数字,但它的确是整型,翻回上面看一下图,可以发现。

    也就是说,char是可以参与算术运算的。但并不是直接参与,而是char的基础值。c# 中的char值是基于Unicode的。通过Unicode,任意字符都可以解释成数字。

    一,使用 ([type])  转型操作符

    此方法适用与值类型转换( string属于引用类型)

    在需要转换的变量前加上( [类型] )即可

    请仔细观察下面两图的差异

    第二张图中的代码中,第二行,为 int b = (int)i;  

    在需要转换的变量前使用 ([type]) 这种格式进行转换,如(int)、(float)、(long)

    注意,

    此种方法只能对 值类型 数据进行转换。

     不应将范围大的类型 往 小 转换将浮点型转为整形不能将超范围的往小了转

    例如 float 转为 int, 精确度会被自动丢失

    输出   666

     - - -

    将大于其类型范围的数给它时,会发生溢出。

    char 可以直接跟 int 或 long 使用。

                int a ='1' + '3';  //小转大
                char b = (char)a;  //大转小
                int c = 'a' + '5';  //char可以直接转为 int
    

      


      注意上下例子的不同 ,int 直接转为char,会报错

    第二,[Type].Parse()

     ([type]) 方法是无法在值类型、引用类型( string 类型)间转换的。

    但每种数据类型都提供一个Parse()方法,它允许把 字符串 转成对应的 数值类型。

    int.Parse()

    float.Parse()

    ... ...

    请看例子

            string str = "666";
            long i = int.Parse(str);
            Console.WriteLine($"{i},{i.GetType()}");
            Console.ReadKey();

    (图如)

    注意,

    Parse() 是专为 string 类型转成 值类型 提供功能的!

    Parse() 是为符合数字格式的 string 类型进行转换!

    下面的例子都是错误用法 !

     Parse() 是将符合数字格式的字符串转为数字,也就是说,

    • ( )括号内的必须为字符串 !
    • 字符串的内容必须为数字 !

    例子 1     ( )  括号内的内容不是字符串

    例子 2   变量 str 的内容不是 有效数字格式

     

    第三,[Type].TryParse()

    格式如下

    int.TryParse()

    float.TryParse()

    ... ...

     .TryParse() 与 .Parse()  相似,但是使用形式不太一样,

    [类型].TryParse(要更改的字符串,out 存储到哪个变量); 

    最重要的不同点在于, .TryParse()  在转换失败时,不会引发异常,而是返回 flase

    例子

            string str = "666";
            int i;
            bool b = int.TryParse(str,out i);    //接收转换结果
    或者
    
            string str = "666";
            int i;
            int.TryParse(str,out i);    //不接收转换结果
    

      如果你不知道 out 的使用,请查阅 C#中的out参数/ref参数/params可变参数

    第四,System.Convert

    方法例子

    System.Convert.ToSingle();
    System.Convert.ToInt32();
    System.Convert.ToDouble();

    ... ...

    System.Convert  允许将一种类型转为另一种类型。

    常见 类型列表: char、sbyte、short、int、long、uint、ulong、float、double、decimal、string、bool ... ...

    但是,同样需要格式支持!

            string str = "666";
            int a= System.Convert.ToInt32(str);        //正确
    
            string str = "666.66";
            int a= System.Convert.ToInt32(str);        //报错
    
            int a = 66666;
            bool c = System.Convert.ToBoolean(a);        //正确
    
            string str = "666.66";
            bool c = System.Convert.ToBoolean(str);        //报错
    
       
    

      System.Convert 在转换是也需要注意 格式 才能转换成功。

           同样,此方式也会发生精确度、数字大小改变

     第五,System.Convert

    .Tostring()

    每种数据类型都提供了转为字符串类型的方法 ToString()

    无论是值类型还是DateTime 等各种引用类型。

    ToString()使用方法最为简单,请留意下列例子的红色背景部分

    using System;
    using System.IO;
    
    public class Test
    {
    
        static void Main()
        {
            int a = 666;
            string aa = a.ToString();
            Console.WriteLine($"{aa}");
    
            float b = 666.666F;
            string bb = b.ToString();
            Console.WriteLine($"{bb}");
    
            DateTime c = DateTime.Now;
            string cc = c.ToString();
            Console.WriteLine($"{cc}");
    
            FileInfo d = new FileInfo("E:\test.txt");
            string dd = d.ToString();
            Console.WriteLine($"{dd}");
    
            string ee;
            try
            {
                int x = 1;
                int y = 0;
                int e = x / y;
            }
            catch (Exception ex)
            {
                ee = ex.ToString();
                Console.WriteLine($"{ee}");
            }
    
    
            Console.ReadKey();
        }
    
    }

    看到了吧?无论什么类型,只需在后面加上 ToString() , 都能 输出 string 类型的内容。(不是转为 string 类型!)

    当然,ToString() 是一个方法,并提供了 一下传入参数,每种类型都有几个重载的 TOString() 方法,例如DateTime的

    public string ToString(string format, IFormatProvider provider);
    public string ToString(string format);
    public string ToString(IFormatProvider provider);
    public override string ToString();

    其它方面不再赘述。

    复制下列代码到控制台,看看输出了什么

    using System;
    using System.IO;
    
    public class Test
    {
    
        static void Main()
        {
            int a = 666;
            string aa = a.ToString();
            Console.WriteLine($"{aa}");
    
            float b = 666.666F;
            string bb = b.ToString();
            Console.WriteLine($"{bb}");
    
            DateTime c = DateTime.Now;
            string cc = c.ToString();
            Console.WriteLine($"{cc}");
    
            FileInfo d = new FileInfo("E:\test.txt");
            string dd = d.ToString();
            Console.WriteLine($"{dd}");
    
            string ee;
            try
            {
                int x = 1;
                int y = 0;
                int e = x / y;
            }
            catch (Exception ex)
            {
                ee = ex.ToString();
                Console.WriteLine($"{ee}");
            }
    
    
            Console.ReadKey();
        }
    
    }
  • 相关阅读:
    JS编码解码详解
    web的几种返回顶部
    图片的懒加载的两种效果
    获取两个日期差
    C#虚方法
    依赖注入(DI)和Ninject
    在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的
    PetShop的系统架构设计
    C#综合揭秘——细说多线程(下)
    C# Socket编程(4)初识Socket和数据流
  • 原文地址:https://www.cnblogs.com/whuanle/p/9938918.html
Copyright © 2011-2022 走看看