五、數據類型轉換

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關鍵字不起作用。
 */


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章