[.NET學習筆記]C#新特性——隱式類型

來源:互聯網
上載者:User

關於隱式類型,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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.