C#数据类型转换 显式转型、隐式转型、强制转型

简介: C#数据类型转换 显式转型、隐式转型、强制转型

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


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


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


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

 

隐式转型


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



1

2

inti = 66666;

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


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


微信图片_20220426104037.png


微信图片_20220426104048.png


显式转型


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

 

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

char 是整型!

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

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

 

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


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

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

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


微信图片_20220426104058.png


微信图片_20220426104103.png


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

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

注意,

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


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

 

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


微信图片_20220426104107.png


输出   666

- - -

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


微信图片_20220426104111.png


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


1

2

3

            inta ='1''3';  //小转大

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

<br>


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


微信图片_20220426104117.png


第二,[Type].Parse()


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

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

int.Parse()

float.Parse()

... ...

请看例子


1

2

3

4

stringstr = "666";

longi = int.Parse(str);

Console.WriteLine($"{i},{i.GetType()}");

Console.ReadKey();


(图如)


微信图片_20220426104121.png

 

注意,


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

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

 

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


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

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

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


微信图片_20220426104128.png


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


微信图片_20220426104132.png


第三,[Type].TryParse()


格式如下

int.TryParse()

float.TryParse()

... ...


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


1

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


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


例子


1

2

3

4

5

6

7

8

        stringstr = "666";

        inti;

        boolb = int.TryParse(str,outi);    //接收转换结果

或者

 

        stringstr = "666";

        inti;

        int.TryParse(str,outi);    //不接收转换结果


  如果你不知道 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 ... ...


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


1

2

3

4

5

6

7

8

9

10

11

12

13

stringstr = "666";

inta= System.Convert.ToInt32(str);        //正确

 

stringstr = "666.66";

inta= System.Convert.ToInt32(str);        //报错

 

inta = 66666;

boolc = System.Convert.ToBoolean(a);        //正确

 

stringstr = "666.66";

boolc = System.Convert.ToBoolean(str);        //报错


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

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


微信图片_20220426104138.png

 

第五,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的

publicstring ToString(string format, IFormatProvider provider);

publicstring ToString(string format);

publicstring ToString(IFormatProvider provider);

publicoverridestring 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();
    }
}
相关文章
|
3月前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
3月前
|
存储 C#
C#数据类型之结构体介绍
C#数据类型之结构体介绍
|
3月前
|
C#
C#数据类型之枚举类型
C#数据类型之枚举类型
|
3月前
|
存储 编译器 数据处理
C#基础入门之数据类型
C#基础入门之数据类型
|
3月前
|
存储 C# 图形学
【Unity 3D】C#数据类型和变量、命名规范的讲解(附源码)
【Unity 3D】C#数据类型和变量、命名规范的讲解(附源码)
115 1
|
6天前
|
Java C#
C# 和 java 基本数据类型
C# 和 java 基本数据类型
6 0
|
2月前
|
存储 C# 开发者
C# 编程基础:注释、变量、常量、数据类型和自定义类型
C# 编程基础:注释、变量、常量、数据类型和自定义类型
28 1
|
2月前
|
开发框架 .NET 程序员
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
17 0
|
3月前
|
存储 C#
深入C#数据类型
深入C#数据类型
|
3月前
|
C#
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)