標籤:.net開發 c#編程
類型轉換的概念
所有的資料在電腦記憶體中都是由一系列的位組成,即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); }}
結果顯示:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/49/4B/wKiom1QSnAbCb1plAAC7iSwPG1E727.jpg" title="2014-09-12 15_08_03-file____C__Program Files_Notepad++_plugins_CSScriptNpp_cscs.exe.png" alt="wKiom1QSnAbCb1plAAC7iSwPG1E727.jpg" />
本文出自 “行動勝於言語” 部落格,請務必保留此出處http://vikxiao.blog.51cto.com/9189404/1551588
一步一步學習C#語言【類型轉換】