五、数据类型转换

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _5.数据类型转换
{
    class Program
    {
        static void Main(string[] args)
        {
            // 隐式类型转换
            {
                ushort destinationVar;
                char sourceVar = 'a';
                
                // 下面这条语句把char类型隐式转换成ushort类型。
                destinationVar = sourceVar;
                Console.WriteLine("sourceVar val: {0}", sourceVar);
                Console.WriteLine("destinationVar val: {0}", destinationVar);
            }
            
            // 显式类型转换
            {
                byte destinationVar;
                short sourceVar = 7;
                
                // 下面这条语句把short类型显式转换成byte类型。
                // 如果不强制类型转换,会出现编译错误。
                destinationVar = (byte)sourceVar;
                Console.WriteLine("sourceVar val: {0}", sourceVar);
                Console.WriteLine("destinationVar val: {0}", destinationVar);
            }
            
            // 表达式的溢出检查上下文
            {
                byte destinationVar;
                short sourceVar = 281;
                
                // byte类型的最大值255,所以此语句进行强制类型转换后会溢出。其结果为25
                destinationVar = (byte)sourceVar;
                // destinationVar = checked((byte)sourceVar); 
                // 上面这条语句进行溢出检查时,会出现OverflowException异常。
                // destinationVar = unchecked((byte)sourceVar); 
                // 上面这条语句表示不进行溢出检查和不加此溢出检,查结果是一样的。
                Console.WriteLine("sourceVar val: {0}", sourceVar);
                Console.WriteLine("destinationVar val: {0}", destinationVar);
            }
            
            // 使用Convert类方法进行转换
            {
                bool boolVal = true;
                double doubleVar = 99.999;
                string stringResult;
                string stringVal = "17";
                int integerVal = 67;
                long longResult;
                
                stringResult = Convert.ToString(boolVal) + Convert.ToString(doubleVar);
                Console.WriteLine("stringResult: {0}", stringResult);
                
                longResult = integerVal + Convert.ToInt64(stringVal);
                Console.WriteLine("longResult: {0}", longResult);
            }
            Console.ReadKey();
        }
    }
}

/**
 * 一、数据类型转换
 * 1. 基本概念
 * a) 不同类型的变量使用不同的模式来表示数据。
 * b) 它们占用的存储空间可能相同,也许目标类型有足够的存储空间包含所有的源数据位,结果也有可能与期望不同。
 * 
 * 2. 数据类型转换分类
 * 可分为隐式类型转换和显式类型转换。
 * 
 * 二、隐式类型转换
 * 1. 基本概念
 * 从类型A到类型B的转换可以在所有情况下进行,执行转换规则非常简单,可以让编译器执行转换。
 * 
 * 2. 隐式转换规则
 * 任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可以进行隐式转换为类型B。
 * 
 * 3. 基本类型隐式转换表
 * 类型   可以安全转换为
 * byte   short,ushort,int,uint,long,ulong,float,double,decimal
 * sbyte  short,int,long,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
 * 
 * bool和string类型没有隐式转换。
 * 
 * 三、显式类型转换
 * 1. 基本概念
 * 从类型A到类型B的转换只能在某些情况下进行,转换规则比较复杂,应进行某种类型的处理。
 * 
 * 2. 转换规则
 * 强迫数据从一种类型转换为另一种类型。
 * 其语法为:
 *  <(destinationType)sourceVar>;
 *  此种转换只能在某种情况下才是可行的。彼此之间没有关系的类型或根本没有关系的类型不能进行强制转换。
 *  
 * 四、表达式的溢出检查上下文
 * 1. 简单检查源变量的值,把它与目标变量的取值范围进行比较。
 * 2. 迫使系统特别注意运行期间的转换。
 *  使用checked和unchecked关键字进行表达式的溢出检查上下文。
 *  其使用语法:
 *      checked(expression)     <检查表达式是否溢出,如出现溢出情况会抛出OverflowException异常>
 *      unchecked(expression)   <对表达式溢出情况不进行检查>
 *      
 * 五、使用Convert类进行显式转换
 * 1. 数值的有效表达方式
 * 首先是一个可选符号(加号或减号),然后是0位或多位数字,一个句点后跟一位或多位数字,接着是一个可选的e或E,
 * 后跟一个可选符号和一位或多位数字(在这个序列之前或之后)和空格。
 * 
 * 2. 转换方法
 * // 整数类型
 * 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.ToBoolean(val)   val转换为bool
 * 
 * // 字符类型
 * Convert.ToChar(val)      val转换为char
 * 
 * // 字符串类型
 * Convert.ToString(val)    val转换为string
 * 
 * 使用以上类型转换方式总是会进行溢出检查,checked和unchecked关键字不起作用。
 */

网站栏目:五、数据类型转换
网站路径:http://pwwzsj.com/article/ppsosj.html