在编写代码的过程中类型转换是必不可少的,下面介绍C#中的基本类型转换(引用类型的转换更复杂一些,将在后续的文章中介绍)。C#支持两种转换方式:1、隐式转换 2、显示转换。
1、隐式转换
只要能保证值不会发生任何变化,类型转换就可以自动的进行,也就是进行隐式转换。
下面给出C#支持的隐式类型转换:
注意:
1、隐式转换关注符号,有符号数是不能隐式转换成无符号数的;
2、long 和 ulong 是 64 位的,float 是 32 位的,但是他们可以隐式转换成 float ,编译器认为这是一个可以接受的错误;
3、char 类型 可以隐式转换成任意的 正数字类型( byte 类型除外,他们之间必须显示转换),因为字符有对应的 ASCII 码;
4、值类型可以隐式转换成对应的可空类型,如 int 转换成 int?。
下面给出示例:
char a = 'c';
int b = a; // b = 99 ,字符 c 对应的ASCII码值是 99
byte c = 10;
byte d = 11;
// 注意这种情况,c + d 的结果是 int 类型,这里没有进行隐式转换。因为 byte 类型的范围是 0 ~ 255(2^8-1),
//这个范围很小,两个 byte 类型的值得运算很容易溢出,所以两个 byte 类型的值的 加减乘除 运算默认返回 int 类型
int e = c + d;
int f = 5;
int? f1 = f;
可空类型的介绍和使用:点击打开链接
2、显示转换
在不支持隐式转换的情况下可以使用类型强制转换符 (类型) 进行显示转换。
注意:
1、显示类型转换可能会丢失数据,导致得不到预期的值;
2、显示类型转换需要谨慎处理,在编译的时候可能会报错,比如 int? a = null , int b = (int)a;
3、布尔类型( bool ) 不支持显示转换;
4、因为值类型是间接继承自 object 类的,所以数字转换成字符串可以直接调用 ToString() 方法;
5、字符串转换成数字不能使用强制转换,可以使用类型预定义的 Parse() 方法。
下面给出示例:
int a = -1;
// 因为 uint 是正整数,所以 -1 转换成 uint 结果不是 -1
uint a1 = (uint)a; // a1= 4294967295
int? b = null;
// 注意:这里在运行的时候会报错,因为 int 类型的值不能为空
int b1 =(int)b;
// 可以这样处理,使用 空合并运算符 ?? 来处理,当 b 不为空时,将 b2 = b,否则 b2 = 0;
int b2 = b ?? 0;
// 也可以使用 三元运算符、不过要注意 三元运算符中 必须要进行显示转换,空合并中不需要
int b3 = b != null ? (int)b:0;
string c = "4";
// Parse()方法只支持字符串
int c1 = int.Parse(c);
string c2 = c1.ToString();
C#中运算符的介绍和使用: 点击打开链接