C# 基础知识系列- 1 数据类型 (2)

类型转换是指一个类型的数值通过某种手段转换成另一种类型。
类型转换分为两种方式:默认类型转换强制类型转换

默认类型转换

在以下几种情况会触发默认类型转换:

当一个子类想转换成它的父类时,

当短精度向高精度转换时。
如: byte -> int -> long -> float -> double
参照:

int i = 1; double d = i; float f = i; d = f; uint ui = 1; long l = ui; d = l; f = l;

这里有几个需要特别注意的地方:

无符号和有符号之间的转换,如果无符号的位数与有符号之间的位数一致的话不能默认转换。

decimal 所有的整型均可以默认转为 decimal,即 除 double、float以外所有数字类型的均可以。

强制类型转换 数据类型判断 is :

C# 内置了一个关键字 用来 判断 某个变量是否是某个类型

class A { } class B : A { } class C : A { } class Program { static void Main() { B b = new B(); A a = b; // 这时候 a 是一个 假装自己是A的B的引用 Console.WriteLine("a is B ? {0}", a is B); // 结果: true Console.WriteLine("a is A ? {0}", a is A); // true Console.WriteLine("a is C ? {0}", a is C); // false } }

那么is有什么用呢?在强制类型转换之前检测一下是否可以转换为目标类型,如果返回值为 false 依旧要转换的话,那么就会报错。

强制类型转换

强制类型转换分为两种:

在变量前加目标类型强制转换,这个方法与C/C++、Java的方式一致,具体为:C c1 = (C)a;// 代码接上

使用as关键字,as 表示将变量 x 当做类型YC c2 = a as C;// 代码接上

两种方式的区别:

当转型失败时会抛出错误,直接终止代码

当转型失败时将c2置为null。当前步骤不会抛出异常,如果对于空引用没有进行处理,那么会在后续中抛出空引用的异常。

值类型的类型转换

在之前的内容中我们提到了小精度到大精度可以默认转换。但是我们在平常使用的过程中会遇到各种情况下的转换,那么这个时候我们就要用到强制转换了,这个时候精度丢失对于我们来说就是可以接受的。
常见的转换方式有:

使用类型强制声明转换 例: long lval = 100; int i = (int)lval;

使用 System.Convert类。使用 Convert.ToXXX(),其中XXX表示转型目标对象。

//Convert 示例代码 long lval = 19293; var i = Convert.ToInt32(lval); double d = 10.091; var dc = Convert.ToDecimal(d); var dt = Convert.ToDateTime("2019-03-30");

值得注意的是:Convert的ToXXX其中XXX使用的是C#类型名称,而不是关键字。Convert是个很有用的类,在我们开发工作中会大量的使用这个类进行值的类型转换。
当然后续我们会对其进行更深入的介绍。

更多内容查看 我的博客 或

file

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzwyf.html