- 类型转换的概念
所有的数据在计算机内存中都是由一系列的位组成,即0和1组成。不同的类型用不同的位模式来存储。
类型转换即是一系列位从一种类型的变量到另一种类型的变量中,它们占用的存储空间可能不相同,目标类型可能能存储下所有源数据,结果可能会得到不期望值。
类型转换有两种形式:隐式转换和显式转换。
- 隐式转换
隐式转换不需要做任何动作,也不需要编写任何代码来实现。
即使两个变量存储信息完全相同,使用不同类型来解释他们时,方式也是不同的。
简单类型只有bool类型和string类型没有隐式转换。
隐式转换规则:任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可进行隐式转换。
下图为数值类型隐式转换表:类型 目标 sbyte short、int、long、float、double、decimal byte short、ushort、int、uint、long、ulong、float、double、decimal short int、long、float、double、decimal ushort int、uint、long、ulong、float、double、decimal int long、float、double、decimal uint long、ulong、float、double、decimal long float、double、decimal ulong float、double、decimal float double char ushort、int、uint、long、ulong、float、double、decimal - 显式转换
显式转换是强制数值从一种数据类型转换成另一种数据类型。
语法: <(destinationType)sourceVar>
彼此之间几乎没有什么关系的类型或根本没有关系的类型,不能进行强制转换。
示例: byte destinationVar;
short sourceVar = 281;
destinationVar = (byte)sourceVar;
当显式把一种数据类型转换成另一种数据类型,可能会造成数据溢出或丢失。
可以使用checked和unchecked关键字检查表达式是否溢出。
示例: byte destinationVar;
short sourceVar = 281;
destinationVar = checked((byte)sourceVar);
执行上述代码,程序将崩溃。
- 使用Convert命令进行显式转换
使用Convert命令进行显式转换时,总是要进行溢出检查,checked和unchecked关键字以及项目属性设置不起作用。
-
命令 结果 Convert.ToByte(val) val转换为byte Convert.ToSByte(val) val转换为sbyte Convert.ToInt16(val) val转换为short Convert.ToUInt16(val) val转换为ushort Convert.ToInt32(val) val转换为int Convert.ToUInt32(val) val转换为uint Convert.ToInt64(val) val转换为long Convert.ToUInt64(val) val转换为ulong Convert.ToSingle(val) val转换为float Convert.ToDouble(val) val转换为double Convert.ToDecimal(val) val转换为decimal Convert.ToChar(val) val转换为char Convert.ToBoolean(val) val转换为bool Convert.ToString(val) val转换为string - 数据类型转换示例
-
using System; class program { static void Main(string[] args) { short shortResult, shortVal = 4; int integerVal = 67; long longResult; float floatVal = 10.5F; double doubleResult, doubleVal = 99.999; string stringResult, stringVal = "17"; bool boolVal = true; Console.WriteLine("Variable Conversion Examples\n"); doubleResult = floatVal * shortVal; Console.WriteLine("Implicit, -> double: {0} * {1} -> {2}", floatVal, shortVal, doubleResult); shortResult = (short)floatVal; Console.WriteLine("Explicit, -> short: {0} -> {1}", floatVal, shortResult); stringResult = Convert.ToString(boolVal) + Convert.ToString(doubleVal); Console.WriteLine("Explicit, -> string: \"{0}\" + \"{1}\" -> {2}", boolVal, doubleVal, stringResult); longResult = integerVal + Convert.ToInt64(doubleVal); Console.WriteLine("Mixed, -> long: {0} + {1} -> {2}", integerVal, doubleVal, longResult); } }
结果显示:
时间: 2024-08-04 09:57:31