C# 数据类型及相互转换及常用基础
值類型包括簡單類型(如字符型、浮點型和整數型等)、集合類型和結構型。
引用類型包括類類型、接口類型、代表類型和數組類型。
值類型和引用類型的不同之處是值類型的變量值直接包含數據,而引用類型的變量把它們的引用存儲在對象中。對于引用類型的變量,完全有可能讓兩個不同的變量引用同一個對象,這樣一來,對其中一個變量的操作就會影響到被另一個變量引用的對象。對于值類型的變量而言,每一個變量有它們自己的數值,因此對其中一個變量的操作不可能影響到另外一個變量。
類型之間的轉換
位數少的轉換為位數多的,可以使用隱式轉換;
位數多的轉換為位數少的,要使用顯式轉換。
| 數據類型 | 范圍 | 默認值 | 示例 | 
| byte | System.Byte 無符號整數 8位  -128 到 127  | 0 | |
| sbyte | System.SByte 有符號整數 8 -128 到 127  | 0 | |
| int | System.Int32 有符號整數 32  -2,147,483,648 到 2,147,483,647  | 0 | |
| uint | System.UInt32 無符號整數 32  0 到 4294967295  | 0 | |
| short | System.Int16 有符號整數 16  -32,768 到 32,767  | 0 | |
| ushort | System.UInt16 無符號整數 16  0 到 65535  | 0 | |
| long | System.Int64 有符號整數 64  -922337203685477508 到 922337203685477507  | 0 | |
| ulong | System.UInt64 無符號整數 64  0 到 18446744073709551615  | 0 | |
| float | System.Single 單精度浮點類型 32  -3.402823e38 到 3.402823e38  | 0.0F | |
| double | System.Double 雙精度浮點類型 64  -1.79769313486232e308 到 1.79769313486232e308  | 0.0D | |
| char | System.Char 單個 Unicode 字符 16  用在文本中的 Unicode 符號  | \x0000 | |
| bool | System.Boolean 邏輯 Boolean 類型 8  true 或 false  | false | |
| object | System.Object  所有其他類型的基本類型  | ||
| string | System.String  字符序列  | ||
| decimal | System.Decimal 可以表示具有 29 個有效位的小數的精確分數或整數類型 128  -2 x 10-96 到 2 x 1096  | 0.0M | 
常用格式舉例:
(1) int i=12345; 
this.textBox1.Text=i.ToString();
(6) DateTime dt =new DateTime(2003,5,25); 
this.textBox1.Text=dt.ToString("yy.M.d");
//結果 03.5.25
this.textBox2.Text=dt.ToString(“yyyy年M月”);
//結果 2003年5月
(7) int i=123;
double j=123.45;
string s=string.Format("i:{0,-7},j:{1,7}",i,j);
//-7表示左對齊,占7位
this.textBox1.Text=s ; 
//結果i:123 ,j: 123.45
//結果 12345(this指當前對象,或叫當前類的實例)
this.textBox2.Text=i.ToString("d8"); 
//結果 00012345
(2) int i=123;
double j=123.45;
string s1=string.Format("the value is {0,7:d}",i);
string s2=string.Format("the value is {0,7:f3}",j);
this.textBox1.Text=s1 ;
//結果 the value is 123
this.textBox2.Text=s2;
//結果 the value is 123.450 
(3) double i=12345.6789
this.textBox1.Text=i.ToString("f2");//結果 12345.68
(4)double i=12345.6789;
this.textBox1.Text=i.ToString("n"); //結果 12,345.68
this.textBox2.Text=i.ToString(“n4”); //結果 12,345.6789 
(5)double i=0.126;
string s=string.Format("the value is {0:p}",i);
this.textBox1.Text=i.ToString("p"); //結果 12.6%
this.textBox2.Text=s; //結果 the value is 12.6%
數組
特點:所有的元素類型都相同。
//一維數組
string[] arr={"c","c++"};
string[] mystrings=new string[3];
int[] intArr1=new int[4]{0,1,2,3};
int[] intArr2={5,6,7};
int nvar=5;
//二維數組
int[,] arr = {{0,1}, {2,3}, {4,5}};
int[,] myArr = new int[5,3]; 
//鋸齒型數組
string[][] stra=new string[3][];
stra[0]=new string[2]{"a11","a12"};
stra[1]=new string[3]{"b11","b12","b13"};
stra[2]=new string[5]{"a","e","i","o","u"};
類型之間的轉換
位數少的轉換為位數多的,可以使用隱式轉換;
位數多的轉換為位數少的,要使用顯式轉換。
裝箱和拆箱
int i=123; //數值類型
object box=i; //裝箱操作
int j=(int)box; //拆箱操作
值類型
所有的值類型都隱含地聲明了一個公共的無參數的構造函數,這個構造函數叫做默認構造函數。默認構造函數返回一個初始為零的值類型的實例,稱之為默認值。
對于sbyte、byte、short、ushort、int、uint、long、ulong ,默認值為0。 
對于char,默認值是‘\x0000’
對于float,默認值是0.0F
對于double,默認值是0.0D
對于decimal,默認值是0.0M
對于bool,默認值是false
對于一個枚舉類型,默認值是0
對于一個結構類型,默認值的設置就是把所有值類型的 域都設置為它們各自的默認值,把所有的引用類型的域賦為空
簡單類型
C#提供一套預定義的結構類型叫做簡單類型。簡單類型用保留字定義,這些保留字僅僅是在System名字空間里預定義的結構類型的化名。比如int是保留字,System.Int32是在System名字空間中預定義類型。一個簡單類型和它化名的結構類型是完全一樣的,也就是說寫int和寫System.Int32是一樣的。
簡單類型主要有整型、浮點類型、小數類型、布爾類型、字符型
整型
C#中支持9種整型:sbyte、byte、short、ushort、int、 uint、long、ulong和char。
Sbyte:代表有符號的8位整數,數值范圍從-128 ~ 127
Byte:代表無符號的8位整數,數值范圍從0~255
Short:代表有符號的16位整數,范圍從-32768 ~ 32767
ushort:代表有符號的16位整數,范圍從-32768 ~ 32767
Int:代表有符號的32位整數,范圍從-2147483648 ~ 2147483648 
uint:代表無符號的32位整數,范圍從0 ~ 4294967295
Long:代表有符號的64位整數,范圍從 -9223372036854775808 ~ 9223372036854775808 
Ulong:代表無符號的64位整數,范圍從 0 ~ 18446744073709551615
char:代表無符號的16位整數,數值范圍從0~65535。
Char類型的可能值對應于統一字符編碼標準(Unicode)的字符集。
Char類型與其他整數類型相比有以下兩點不同之處:
1、沒有其他類型到char類型的隱式轉換。即使是對于sbyte,byte和ushort這樣能完全使用char類型代表其值的類型, sbyte,byte和ushort到char的隱式轉換也不存在。
2、char類型的常量必須被寫為字符形式,如果用整數形式,則必須帶有類型轉換前綴。比如(char)10
賦值形式有三種:
char chsomechar=“A”;
char chsomechar=“\x0065”; 十六進制
char chsomechar=“\u0065 ; unicode表示法
| 轉義符 | 轉義符 | 轉義符 | 轉義符 | 
| \‘ 用來表示單引號 | \t 用來表示水平tab | \” 用來表示雙引號 | \f 用來表示換頁 | 
| \\ 用來表示反斜杠 | \v 用來表示垂直tab | \0 表示空字符 | \n 用來表示換行 | 
| \a 用來表示感嘆號 | \r 用來表示回車 | \b 用來表示退格 | 
浮點類型
C#支持兩種浮點類型:float和double。
Float型所能表示的值的范圍大約可以從1.5*10^-45~3.4* 10^38,精確到小數點后面7位。
Double型所能表示的值的范圍大約可以從5.0*10^-324~1.7* 10^308,精確到小數點后面15位或16位。
如果二元操作中的其中一個操作數為浮點類型,那么另外一個操作數是整型或浮點類型,運算規則如下:
1、如果其中一個操作數是整型,則操作數被轉換為另一個操作數的浮點數類型;
2、如果操作數之一為double,則另一操作數也被轉換成double類型,運算以double類型的精度和取值范圍進行,并且所得結果也為double類型;
3、否則,運算至少將以float類型的取值范圍和精度進行,并且所得結果也為float型。
小數(decimal)類型
小數類型非常適用于金融和貨幣運算。數值范圍從1.0*10^-28~7.9* 10^28,精確到小數點后面28位。
如果二元操作中的其中一個操作數是小數類型,那么另外一個從操作數是整型或小數類型。整型在運算前被轉化為小數類型數。
如果一個小數類型的算術運算產生了一個對于小數類型的格式來說太小的值,操作的結果將會變成0。
如果一個小數類型的算術運算產生了一個對于小數類型的格式來說太大的值,就會觸發溢出錯誤。
小數類型較浮點類型而言,具有更大的精確度,但是數值范圍相對小了很多。
將浮點類型的數向小數類型的數轉化時會產生溢出錯誤,將小數類型的數向浮點類型的數轉化時會造成精確度的損失。因此,兩種類型不存在隱式或顯式轉換。
布爾型:值為true或false。沒有標準能實現布爾類型和其他類型的轉換。
枚舉類型:枚舉類型的元素使用的類型只能是long、int、short、byte。默認類型是int。默認第一個元素的值是0,每一個連續的元素按1遞增。可以給元素直接賦值。如:
enum monthnames {January=1,February, march=31};
可以強制定義其他類型,如:
enum monthnames : byte{January ,February,March};
結構類型
結構類型也是一種值類型,使用它的目的是用于創建小型的對象,用以節省內存.下面的例子表示一個使用byte類型的4個字段的IP地址。
using System;
Struct IP //聲明結構
{ public byte b1,b2,b3,b4;}
Class test
{public static void Main()
{
IP myIP;
myIP.b1=192;
myIP.b2=168;
myIP.b3=1;
myIP.b4=101;
Console.Write(“{0}.{1}.”, myIP.b1, myIP.b2);
Console.Write(“{0}.{1}”, myIP.b3, myIP.b4);
}
}
引用類型
引用類型包括類類型、接口類型、代表類型和數組類型。
1、類類型
類 類型定義了一種數據結構,這個數據結構中包含了數據成員(如常量、字段和事件等),函數成員(如方法、屬性、索引、操作、構造函數和析構函數等)和嵌套類型。支持繼承。
2、對象類型
對象類型是其他所有類型最終的基礎類型。在C#中每一種類型都直接或者間接的源于object這個類類型。
3、字符串類型
字符串類型是直接從object中繼承而來的密封類。String類型的值可以寫成字符串文字的形式。
6、數組
數組是包含一串變量的數據結構。數組變量也稱做數組元素,它們具有相同的類型,這種類型也稱做數組元素類型。數組的元素類型可以是任何類型,包括數組類型。
數組用下標確定每一個數組元素的索引號。只有一個下標的數組稱為一維數組,多于一個下標的數組稱為多維數組。
例:int[] a={0,2,4,6,8}; 等價于int[] a=new int[] {0,2,4,6,8};
也可以這樣初始化:a[0]=0; a[1]=2; a[2]=4; a[3]=6; a[4]=8;
int[] a; //int型的一維數組
int[,] a; //int型的二維數組
int[,,] a; //int型的三維數組
int[] []a; //int型的數組的數組
int[][][]a; //int型的數組的數組的數組
數組的每個維數的長度不是數組類型的一部分,維數的長度是在數組創建語句中指定的,而不是在數組類型中指定的,例如:
int[,,] a3=new int[10,20,30];
a3是是一個數組變量, int[,,] 沒有指定數組的長度,數組創建語句new int[10,20,30]才指定。下面的例子創建一個數組的數組:
int[][] J=new int[3][];
J[0]=new int[] {1,2,3};
J[1]=new int[] {1,2,3,4,5,6};
J[2]=new int[] {1,2,3,4,5,6,7,8,9};
加框和消框
boxing和unboxing允許把任何值類型的值轉化為對象(object)類型,或者把object類型轉化為值類型,這樣它就把值類型和引用類型緊密的結合起來了。
簡單的說,加框操作就是數值類型轉換為類型對象,消框操作就是類型對象轉換為數值類型。
1、加框操作
給一個值加框指隱式地把任何數值類型轉換成類型對象。當一個數值類型被加框時,一個對象實例就被分配,而且數值類型的值復制給新的對象。
如:int n=200;
object o=n; //加框操作
o=201;
Console .WriteLine(“{0}{1}”,n,o);
改變o值,n的值不變
2、消框是顯式操作-必須告訴編譯器,想從對象中抽取出哪一種值類型。當執行消框操作時,C#檢測所請求的值類型是否存儲在對象實例中。
如:
int n=200;
object o=n;
int u=(int) u; //消框轉化
操作符
| 操作符 | 格式 | 說明 | 示例 | 
| 括號操作符 | 格式 () | ||
| 點操作符 | 格式 (E.I) | 其中E是基本表達式或者預定義類型,I是一個標識符。C++里除了“.”之外還有“::” “->”,C#里用點操作符來代替。 比如一個類T有成員變量M,在C++里用T::M來引用,C#里用T.M來引用。 另一點不同的是,C#里預定義類型也是從Object類派生出來的,因此也定義了成員變量,比如,I是一個short類型的變量,那么I.ToInt()操作將返回一個Int類型的值。  | |
| 后綴加減操作符 | 格式:p++;p--; ++p; --p; 結果是給變量p加1或減1  | ||
| new操作符 | 格式:a、 new 類型(參數列表) | b、new 數組類型初始化列表 c、new 代表類型(表達式)  | |
| typeof操作符 | 該操作返回一個類型對應的system.type,如: typeof(int); typeof(System.Int32); typeof(string); 各自的結果為int32,int32,string。typeof只對類型操作,不能對變量操作,例如,“int I;typeof(I);”是不合法的  | ||
| sizeof操作符 | 該操作可獲得一個類型所占用的空間大小,以字節為單位。 | 該操作符用在unsafe模塊中,如 Unsafe{ S=sizeof(int); } 或者在調用該操作符的函數中使用該前綴。  | |
| 單目操作符 (1)+-操作 (2)邏輯非:!(表達式) (3)位非:~(表達式) (4)強制類型轉換: (T) 表達式  | |||
| 關系運算符 ==、!=、< 、>、<= 、 >=、 is  | is用來判斷一個變量是否是某一類型,例如,s is string | ||
| 位邏輯操作符 &(位與)、|(位或)、^(異或)  | 可以對整數、布爾、和枚 舉類型進行這三種操作。  | ||
| 條件邏輯操作符 包括&&(與)和||(或)  | |||
| 條件運算符 | |||
| b? x:y | b為真,結果是x,否則是y | 
語句
| 分類 | 格式 | 說明 | 示例 | 
| 1、語句塊 | { 語句列表} | ||
| 2、空語句 | ; | ||
| 3、標簽語句 | 標識:語句 | 標簽語句可以通過goto語句來引用。標簽不會和變量混淆 | int F(int x){ if (x>=0) goto x; x=-x; x: return x; } 上面的代碼中x既是一個標簽也是一個變量,兩者不會沖 突。  | 
| 語句 | 格式 | 說明 | 示例 | 
| if | if(布爾表達式)嵌入語句[else 嵌入語句] | ||
| switch | switch(表達式){ case 常量表達式:嵌入語句 [default: 嵌入語句]}  | 必須用break強迫退出switch語句,另外如果企圖執行完case 0語句后,繼續執行后面的語句則須使用goto語句。 | switch(i){ case 0: casezero(); goto case1; case1: caseone(); goto default; default: caseothers(); break; }  | 
| while | while(布爾表達式) 嵌入語句 | ||
| do…while | do 嵌入語句 while(布爾表達式) | ||
| for | for([初始化];[布爾表達式];[重復語句])嵌入 | ||
| foreach | foreach(類型 標識 in 表達式)嵌入語句  | foreach語句列舉出聚集的元素,并為每一個聚集的元素執行一條嵌入語句。 | using System; public class foreachapp { public static void Main() { int odd=0,even=0; int[] arr=new int[] {0,1,2,5,7,8,11}; foreach (int i in arr) { if (i%2==0) even++; else odd++; } } }  | 
| break | break語句用于退出最近的包含它的switch、while、do、For或foreach語句。 | ||
| continue | continue語句開始重復執行新的最近的包含它的 whilewhile、do、For或foreach語句。 | ||
| goto | goto語句用于將控制權傳遞給由標號表明的語句。 | ||
| return | Return語句將控制權返回給包含該return語句的函數成員 的調用程序。 | ||
| try-catch | 捕獲并處理異常的好處是不用把那些令人討厭的異常信息提示給用戶,而是使產生了異常的應用程序繼續執行。 try包含可能會產生異常的語句,而catch語句處理一個異常。Throw通常用在異常處理語句中,當拋出異常時,程序在catch語句中搜索對該異常的處理代碼。當拋出異常時,控制被傳遞給處理該異常的try語句中的第一個catch語句。  | ||
| try-finally | 使用try和finally清除異常它不僅抑制了錯誤信息,而且所有包含在finally塊中的代碼在異常被引發后仍然會被執行。 | ||
| try-catch-finally | 使用try-catch-finally處理所有異常合并了前面兩種錯誤處理技術-捕獲錯誤、清除并繼續執行應用程序。 | 
轉載于:https://www.cnblogs.com/Garden-blog/archive/2011/03/17/1987115.html
總結
以上是生活随笔為你收集整理的C# 数据类型及相互转换及常用基础的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 六、 跨多个WebService管理Se
 - 下一篇: Win32 窗口篇(3)