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 = ;
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 = ;
int y = ;
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 = ;
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 = ;
int y = ;
int e = x / y;
}
catch (Exception ex)
{
ee = ex.ToString();
Console.WriteLine($"{ee}");
} Console.ReadKey();
} }

C# 数据类型转换 显式转型、隐式转型、强制转型的更多相关文章

  1. dll的加载方式主要分为两大类,显式和隐式链接

    之前简单写过如何创建lib和dll文件及简单的使用(http://blog.csdn.net/betabin/article/details/7239200).现在先再深入点写写dll的加载方式. d ...

  2. 显式与隐式(ExplicitAndImplicit)

    显式与隐式(Explicit And Implicit) 1.概念 1.1 显式 实现的单词Explicit意思是清楚的.明确的.详述的.所以,显式的“显”是指明显且清楚的实现,相对于接口来说,就是明 ...

  3. 【RS】CoupledCF: Learning Explicit and Implicit User-item Couplings in Recommendation for Deep Collaborative Filtering-CoupledCF:在推荐系统深度协作过滤中学习显式和隐式的用户物品耦合

    [论文标题]CoupledCF: Learning Explicit and Implicit User-item Couplings in Recommendation for Deep Colla ...

  4. C++ 不具有继承关系的类之间的显式,隐式转换 2013-07-11 15:41

    好久没有写blog了,今天在学习c#的时候看到某一章节 讲类的隐式与显式转换.特此留笔,以供后续参考之用. 关于显式,隐式转换有些争论,说什么不建议隐式转换.但是个人认为非必要,如果有良好的基础书写基 ...

  5. 实例理解scala 隐式转换(隐式值,隐式方法,隐式类)

    作用 简单说,隐式转换就是:当Scala编译器进行类型匹配时,如果找不到合适的候选,那么隐式转化提供了另外一种途径来告诉编译器如何将当前的类型转换成预期类型.话不多说,直接测试 ImplicitHel ...

  6. Scala中的Implicit(隐式转换,隐式参数,隐式类)

    文章来自:http://www.cnblogs.com/hark0623/p/4196452.html  转发请注明 代码如下: /** * 隐式转换 隐式参数 隐式类 */ //隐式转换 class ...

  7. JavaScript 数据类型转换(显式与隐式)

    一.数据类型 JS中有5中简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number.String.还有一种复杂数据类型------Object,Object本质是 ...

  8. (转载)Android理解:显式和隐式Intent

    Intent分两种:显式(Explicit intent)和隐式(Implicit intent). 一.显式(设置Component) 显式,即直接指定需要打开的activity对应的类. 以下多种 ...

  9. 【转】Android理解:显式和隐式Intent---- try catch

    原文网址:http://blog.csdn.net/xiao__gui/article/details/11392987 Intent是Android初学者比较难理解的一个东西.我这里以通俗易懂的语言 ...

随机推荐

  1. linux mint19 解决docker必须使用sudo问题

    1 安装完docker 使用时,提示权限不够 ~$ docker info Got permission denied while trying to connect to the Docker da ...

  2. Error处理:/bin/bash^M: 坏的解释器: 没有该文件或目录(bad interpreter: No such file or directory)

    在Linux下编译运行脚本的时候出现”/bin/bash^M: 坏的解释器: 没有那个文件或目录(bad interpreter: No such file or directory)“这样的错误. ...

  3. 多线程编程(四)-CyclicBarrier的使用

    CyclicBarrier的介绍 类CyclicBarrier不仅有CountDownLatch所具有的功能,还可以是啊县屏障等待的功能,也就是阶段性同步,它在使用上的意义在与可以循环地实现线程要一起 ...

  4. 使用Rectangle+ImageBrush来代替Image,解决图片模糊的问题

    <Rectangle Margin="0" Stroke="Black" HorizontalAlignment="Right" Wi ...

  5. Android服务--布局服务(LayoutInflater)

    1. 基本概念 1. 概念: 参考资料:https://www.cnblogs.com/androidez/archive/2013/07/01/3164729.html 一个用于加载布局的系统服务, ...

  6. CSS3动画积累+动画库+3d动画

    一.animates.css animate.css是来自dropbox的工程师Daniel Eden开发的一款CSS3的动画效果小类库.包含了60多款不同类型的CSS3动画,包括:晃动,闪动,各种淡 ...

  7. js文件加载太慢,JavaScript文件加载加速

    原文出自:https://blog.csdn.net/seesun2012 js脚本加载太慢,JavaScript脚本加载加速(亲测有效) 测试背景: JS文件大小:6.1kB 传统形式加载js文件: ...

  8. SSIS教程:创建简单的ETL包 -- 5. 添加包部署模型的包配置(Adding Package Configurations for the Package Deployment Model)

    包配置允许您从开发环境的外部设置运行时属性和变量. 配置允许您开发灵活且易于部署和分发的包.Microsoft Integration Services 提供了以下配置类型: XML 配置文件 环境变 ...

  9. MySQL---4、语句规范

    1.命名规范 (1)库名.表名.(按现在的规范类似; PromoHayaoRecord),数据库名使用小写,字段名必须使用小写字母,并采用下划线分割.关键字与函数名称全部大写.(2)库名.表名.字段名 ...

  10. Linux安装之后需要进行的一些步骤

    查看IP 首先安装后需要查看ip用SSH或者XSHELL来连接Linux,查看ip代码 ifconfig 需要执行 sudo yum install net-tools 命令安装之后 就可以看到ip了 ...