關於隱式類型,Nocturne Studio的部落格文章(http://blog.csdn.net/zqustc/article/details/1868276)總結得很好,直接用它的就好了!
隱式類型變數的使用
C# 3.0中引入了隱式類型變數(Implicitly Typed Variables)。從我的觀點來看,它與object類型以及泛型有著相似的地方。它就是使用一個新的關鍵字var,來代替先前一般應用中的指定一個固定格式的變數類型(int、double、string等等)。看一個例子:
// 顯式類型定義int myInt = 0;bool myBool = true;string myString = "Nocturne Studio.";
如果採用var關鍵字來定義,則可以寫成如下的格式:
// Implicitly typed variables.var myInt = 0;var myBool = true;var myString = "Nocturne Studio.";
在這種情況下,編譯器可以推斷出myInt是System.Int32類型而myString是System.String類型,等等。使用GetType()方法可以擷取它實際的資料類型
static void Main(string[] args){// Implicitly typed variables.var myInt = 0;var myBool = true;var myString = "Nocturne Studio.";Console.WriteLine("The type of myInt is {0}", myInt.GetType().Name);Console.WriteLine("The type of myBool is {0}", myBool.GetType().Name);Console.WriteLine("The type of myString is {0}", myString.GetType().Name);Console.ReadLine();}
輸出的結果為:
除此之外,還可以將數組、泛型以及類賦給var型變數,比如:
var evenNumbers = new int[] { 2, 4, 6, 8 };var myDoubles = new List<double>(); // 這裡的int型數組evenNumbers還可以執行foreach語句進行迭代foreach (var item in evenNumbers){Console.WriteLine("Item value in evenNumbers: {0}", item);} // foreach裡的item也可以用強型別int來指定,即寫成foreach (int item in evenNumbers){Console.WriteLine("Item value in evenNumbers: {0}", item);}
隱式類型變數的一些限制
使用var關鍵字的時候還有些限制。首先,這種類型僅可以應用於方法或屬性內部的局部變數,而不能用在欄位、函數傳回值和參數中。例如,下面的兩個用法都是非法的:
class ErrorExamples{// var 不能用在欄位中private var myInt = 10;// var 不能用在傳回值或參數的類型上public var MyMethod(var x, var y) { }} // VS2008的編輯器都不會將var標藍,用以提醒程式員。 另外,用var關鍵字聲明的局部變數必須在聲明的同時賦值,並且不能被賦予null。//比如下面的做法都是錯誤的:// 錯誤,必須賦以初值var myData;// 錯誤,必須在聲明的同時賦值var myInt;myInt = 0;// 錯誤,初值不能賦以nullvar myObj = null;// 正確,在賦初值之後再指向nullvar myDoubles = new List<double>();myDoubles = null;// 正確,用已有的變數來賦初值var myInt = 0;var myAnotherInt = myInt;隱式類型數組 與局部變數相同地,可以定義隱式類型數組。示範如下:// 實際上是int[]var arrayA = new[] { 1, 2, 3, 4 };// 實際上是double[]var arrayB = new[] { 1, 0.5, 3.14, 2.71828 };// 實際上是string[]var arrayC = new[] { "Nocturne", null, "Studio", "SpadeQ" };// 錯誤,不允許混合類型var arrayD = new[] { 1, "one", 2, "two" };
目前看來,我還不是很清楚這項技術的具體應用,濫用這項技術肯定會對代碼的可讀性造成破壞。後面我會進一步去瞭解LINQ的相關資料,應該能夠找到答案。 敬請期待
注意:本文來自Nocturne Studio的部落格文章(http://blog.csdn.net/zqustc/article/details/1868276)