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();
    }

}

到此这篇关于C#数据类型转换(显式转型、隐式转型、强制转型)的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#中把任意类型的泛型集合转换成SQLXML数据格式的实例

    话不多说,跟着小编一起来看下吧 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlTypes; using System.Data; using System.Reflection; using System.IO; using System.Xml; namespace CollectionToXml { class Program

  • C# 数据类型转换

    目录 前言 相关介绍 一.函数方法 二.类型转换 [1]. 使用Convert转换 [2]. 使用类型名进行转换 总结 前言 在使用Console.Read()或Console.ReadLine()进行输入时,和Python语言的input()类似 两者都是把键盘键入的内容作为string类型返回,所以有些数据需要经过数据类型的转换才能进行计算. 相关介绍 C# System.Convert 类 微软官方C#函数文档 一.函数方法 下面罗列的函数方法不是全部,仅列举一些常用的 double这种有

  • 浅析C#数据类型转换的几种形式

    1.Convert.ToInt32(); //转换成32位的整数.2.变量.ToString();/最常见的转换成 字符串.3."订单"+2514 //后面的数字会转换为字符串.4.((类名A)对象名X) //强行将 对象X 转换成 A类 的对象.5.int.Parse(string);把字符串型转换成其他类型.6.还有,如果要转换成的类型为引用类型,还可以用 as teacher tea = teahcer();如 student stu = tea as student; (1)

  • C#基础之数据类型转换

    int x; long y = 123456789101112; x = (int)y; Console.WriteLine(x); 输出结果: 我们知道long类型的取值范围是-9223372036854775805~+9223372036854775807:int类型的是:-2147483648~+2147483647 上面的代码中,由于long变量的值超过了int能容纳的最大值,造成了数据的丢失:像这样有可能造成数据丢失或引发异常的任何转换都需要执行显式转换(explicit); 相反的就

  • C#数据类型及其转换详解

    前言 在C#中,数据类型可以分为以下几种类型: 值类型(Value types)引用类型(Reference types)指针类型(Pointer types) 其中指针类型只在不安全代码下使用,一般不涉及所以今天不讨论.我们主要探讨引用类型和值类型. 一.基本定义 值类型的变量在声明后,系统直接在托管栈中为其分配内存并保存其数据,其中值类型包括:byte,short,int,long,float,double,decimal,char,bool 和 struct等,当我们声明一个引用类型时,系

  • C#中数据类型的转换介绍

    目录 1.parse转换:将string类型转化为其他类型 2.任意类型转化为string类型 3.隐式转换:自动转换-->小范围到大范围自动转换 4.显示转换:强制转换-->由大范围到小范围的强制转换,不过可能会发生精度丢失 5.最后再给一个简单的题目考考大家: 今天学习了一下数据类型的转换,我整理出了一下笔记: 1.parse转换:将string类型转化为其他类型 //数据类型的转换 //即string"18"==> int 18, //1.parse转换:将st

  • 详解C# 泛型中的数据类型判定与转换

    提到类型转换,首先要明确C#中的数据类型,主要分为值类型和引用类型: 1.常用的值类型有:(struct) 整型家族:int,byte,char,short,long等等一系列 浮点家族:float,double,decimal 孤独的枚举:enum 孤独的布尔:bool 2.常用的引用类型有: string,class,array,delegate,interface 值得注意的是,无论是值类型还是引用类型,在C#中都派生于object,没错,这家伙就是万恶之源! 正是因为有了这一特性,于是我

  • c#之用户定义的数据类型转换介绍

    c# 允许用户进行两种定义的数据类型转换,显式和隐式,显式要求在代码中显式的标记转换,其方法是在圆括号中写入目标数据类型. 对于预定义的数据类型,当数据类型转换时可能失败或丢失某些数据,需要显式转换, 1 把int数值转换成short时,因为short可能不够大,不能包含转换的数值. 2 把有符号的数据转换为无符号的数据,如果有符号的变量包含一个负值,会得到不正确的结果. 3 把浮点数转换为整数数据类型时,数字的小数部分会丢失. 此时应在代码中进行显式数据类型,告诉边起义你知道这会有丢失数据的危

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

    C# 的类型转换有显式转型 和 隐式转型 两种方式. 显式转型:有可能引发异常.精确度丢失及其他问题的转换方式.需要使用手段进行转换操作. 隐式转型:不会改变原有数据精确度.引发异常,不会发生任何问题的转换方式.由系统自动转换. 不同类型的数据进行操作(加减乘除赋值等等),是需要进行 类型转换 后,才能继续操作.所以需要“类型转换”. 隐式转型 隐式转型容易理解,当两种或多种数据类型进行某种操作时,不需要干预,系统会自动进行隐式转换. 如 int i = 66666; long b = i; /

  • 全面了解JavaScript的数据类型转换

    首先,由于JavaScript是弱类型语言(弱类型的语言的东西没有明显的类型,他能随着环境的不同,自动变换类型而强类型则没这样的规定,不同类型间的操作有严格定义,只有相同类型的变量才能操作,虽然系统也有一定的默认转换,当绝没有弱类型那么随便,也就是说变量在声明时不需要指定数据类型,变量由赋值操作确定数据类型),所以在JavaScript的类型转换中就存在了强类型语言所没有的隐式转换. 1.1 JavaScript中的隐式转换(自动类型转换) 简单定义: 不同数据类型的数据在做运算的时候可以进行默

  • JavaScript显式数据类型转换详解

    基本概念 将值从一种类型转换为另一种类型称为类型转换,类型转换总是返回基本类型值,如字符串.数字和布尔值,不会返回引用类型值. 类型转换分为"显式"和"隐式":"显式"转换发生在静态类型语言的编译阶段,而"隐式"转换则发生在动态类型语言的运行时. 显式类型转换 非字符串到字符串的类型转换 toString() 方法 数字.布尔值.字符串和对象都有 toString() 方法,但 null 和 undefined 没有. 例子:

  • C# 中使用隐式和显式操作符的示例

    目录 什么是显式,什么是隐式 创建 DTO 类 Model 和 DTO 之间的相互转换 使用隐式操作符 使用显式操作符 C# 有一个鲜为人知的特性是通过定义 显式和隐式操作符 实现类型之间的转换,这篇文章我们将会讨论如何使用这些 显式 和 隐式 操作符. 什么是显式,什么是隐式 隐式类型转换 它是运行时自动帮你完成的,言外之意就是你不需要人为干预,比如下面的例子就是典型的 隐式类型转换. int x = 100;  double d = x; 不过下面的代码则过不了编译器. double d =

  • 对存在JavaScript隐式类型转换的四种情况的总结(必看篇)

    一般存在四种情况,JavaScript会对变量的数据类型进行转换. 目录 * if中的条件会被自动转为Boolean类型 * 会被转为false的数据 * 会被转为true的数据 * 参与+运算都会被隐式的转为字符串 * 会被转为空字符串的数据 * 会被转为字符串的数据 * 会被转为数据类型标记的数据 * 参与*运算都会被隐式的转为数字 * 会被转为0的数据 * 会被转为1的数据 * 会被转为NaN的数据 * == 运算符 * 为true的时候 * 为false的时候 if中的条件会被自动转为B

  • Mysql 5.6 "隐式转换"导致的索引失效和数据不准确的问题

    背景 在一次进行SQl查询时,我试着对where条件中vachar类型的字段去掉单引号查询,这个时候发现这条本应该很快的语句竟然很慢.这个varchar字段有一个复合索引.其中的总条数有58989,甚至不加单引号查出来的数据不是我们想要的数据. 使用的是mysql 5.6版本,innoDB引擎 实际情况如下 下面我们来看一下执行的结果 在上面的描述中我们还得注意就是,你的where条件的字符串不加单引号必须是全数字.不然就会报错 还有可能查出来的数据不是我们想要的数据.如下图 分析 从执行结果来

  • Android显式启动与隐式启动Activity的区别介绍

    前段时间立志坚持写博客,但是发现自己的积累的确不多,于是假期泡了泡图书馆,读了一些很有价值的文章.收获颇多,今天的文章分享为主,共同学习. 为什么要写显式启动与隐式启动Activity.这源于自己的一次面试,被Baidu工程师问道,但是后来觉得自己回答的不好,废话少说,进入正题. 如题,Android的Acitivity启动大致有两种方式:显式启动与隐式启动.下面分别介绍: A:显式启动 对于初学者来说,这个最常见,下面用代码来解释什么是显式启动. 复制代码 代码如下: Intent inten

  • MySQL隐式类型的转换陷阱和规则

    前言 相信大家都知道隐式类型转换有无法命中索引的风险,在高并发.大数据量的情况下,命不中索引带来的后果非常严重.将数据库拖死,继而整个系统崩溃,对于大规模系统损失惨重.所以下面通过本文来好好学习下MySQL隐式类型的转换陷阱和规则. 1. 隐式类型转换实例 今天生产库上突然出现MySQL线程数告警,IOPS很高,实例会话里面出现许多类似下面的sql:(修改了相关字段和值) SELECT f_col3_id,f_qq1_id FROM d_dbname.t_tb1 WHERE f_col1_id=

  • Scala隐式转换和隐式参数详解

    目录 Scala隐式转换和隐式参数 隐式转换 隐式参数 隐式类 隐式转换和隐式参数的导入 总结 Scala隐式转换和隐式参数 隐式转换 隐式转换是指在Scala编译器进行类型匹配时,如果找不到合适的类型,那么隐式转换会让编译器在作用范围内自动推导出来合适的类型.隐式转换的作用是可以对类的方法进行增强,丰富现有类库的功能,或者让不同类型之间可以相互转换.隐式转换的定义是使用关键字implicit修饰的函数,函数的参数类型和返回类型决定了转换的方向. 例如,下面定义了一个隐式转换函数,可以把Int类

随机推荐