C#中的var關(guān)鍵字用法介紹
從.NET 3.0開(kāi)始,在方法內(nèi)部可以使用var關(guān)鍵字聲明局部變量。var關(guān)鍵字到底是什么?在何種情況下使用呢?
var關(guān)鍵字用來(lái)隱式地聲明一個(gè)數(shù)據(jù)類(lèi)型,變量類(lèi)型是在編譯期確定的,而不是在運(yùn)行時(shí)確定的
聲明一個(gè)var變量a,把整型數(shù)10賦值給a,接著把一個(gè)字符串賦值給變量a。運(yùn)行發(fā)現(xiàn)報(bào)錯(cuò):無(wú)法將類(lèi)型string隱式轉(zhuǎn)換為int。
聲明一個(gè)var變量a,把整型數(shù)10賦值給a,接著把一個(gè)字符串賦值給變量a。運(yùn)行發(fā)現(xiàn)報(bào)錯(cuò):無(wú)法將類(lèi)型string隱式轉(zhuǎn)換為int。
這說(shuō)明:用var聲明一個(gè)變量時(shí),雖然不是顯式聲明,但在編譯期,已經(jīng)確定了變量的類(lèi)型。
通過(guò)反編譯同樣可以證明以上推斷。
→把a(bǔ) = "abc";這行代碼去掉,并生按F6生成解決方案。
→打開(kāi)"VS2012開(kāi)發(fā)人員命令提示",輸入如下命令
→在"解決方案資源管理器"中右鍵項(xiàng)目的名稱(chēng),選擇"在文件資源管理器中打開(kāi)文件夾",再點(diǎn)擊bin,Debug文件夾,在地址欄中賦值Debug文件夾的路徑
→點(diǎn)擊"IL DASM"的文件--打開(kāi),輸入剛才拷貝的Debug文件夾路徑,再選擇.exe后綴的可執(zhí)行文件,雙擊"Main:void(string[])"。在IL代碼中:
可以看出:變量a已經(jīng)是Int類(lèi)型,并且是一個(gè)局部變量。
var關(guān)鍵字讓編碼更簡(jiǎn)短
對(duì)于一些名稱(chēng)比較長(zhǎng)的類(lèi),當(dāng)創(chuàng)建類(lèi)實(shí)例的時(shí)候,用var關(guān)鍵字看上去更簡(jiǎn)短。當(dāng)然這個(gè)理由是比較牽強(qiáng)的~~
class Program { static void Main(string[] args) { HelloIHaveALongLongName<string, string> obj = new HelloIHaveALongLongName<string, string>(); } } public class HelloIHaveALongLongName<T, T> { public string Name; }
如果使用var關(guān)鍵字,就變成:
var obj = new HelloIHaveALongLongName<string, string>(); obj.Name = "hello";
可見(jiàn),用var關(guān)鍵字,讓寫(xiě)法更簡(jiǎn)短,并且var變量是一個(gè)強(qiáng)類(lèi)型。
var關(guān)鍵字與匿名類(lèi)型
通過(guò)LINQ表達(dá)式返回一個(gè)匿名類(lèi)型。
static void Main(string[] args) { string[] strs = {"hello", "world", "nice", "to", "meet", "you"}; object o = from s in strs where s.Length > 3 select new {s.Length, s}; }
以上,object類(lèi)型變量o并不是一個(gè)強(qiáng)類(lèi)型變量。
如果我們用強(qiáng)類(lèi)型的類(lèi)來(lái)接收LINQ返回的集合。
class Program { static void Main(string[] args) { string[] strs = {"hello", "world", "nice", "to", "meet", "you"}; IEnumerable<SomeData> o = from s in strs where s.Length > 3 select new SomeData() {Key = s.Length, Value = s}; foreach (SomeData item in o) { Console.WriteLine(item.Key); } } } public class SomeData { public int Key; public string Value; }
以上,在IEnumerable<SomeData>類(lèi)型集合中,每一個(gè)集合元素都是強(qiáng)類(lèi)型。
如果用var關(guān)鍵字來(lái)接收LINQ返回的匿名類(lèi)型集合。
class Program { static void Main(string[] args) { string[] strs = { "hello", "world", "nice", "to", "meet", "you" }; var o = from s in strs where s.Length > 3 select new { Key = s.Length, Value = s }; foreach (var item in o) { Console.WriteLine(item.Key); } } }
以上,var類(lèi)型變量o接收匿名類(lèi)型集合,該集合的每個(gè)元素也是強(qiáng)類(lèi)型。也就是說(shuō),編譯器在編譯的時(shí)候自動(dòng)推斷類(lèi)型。
總結(jié):
- 通過(guò)var關(guān)鍵字聲明的變量,變量類(lèi)型是在編譯期確定的,而不是在運(yùn)行時(shí)確定
- 對(duì)于LINQ表達(dá)式返回的匿名類(lèi)型,可以用var關(guān)鍵字聲明的變量接收
- 對(duì)于一些名稱(chēng)比較長(zhǎng)的類(lèi),類(lèi)實(shí)例化的時(shí)候,可以用var關(guān)鍵字聲明的變量接收
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
c#中winform根據(jù)郵箱地址和密碼一鍵發(fā)送email的實(shí)現(xiàn)
本文主要介紹了c#winform根據(jù)郵箱地址和密碼一鍵發(fā)送email的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Unity調(diào)取移動(dòng)端的麥克風(fēng)進(jìn)行錄音并播放
這篇文章主要為大家詳細(xì)介紹了Unity調(diào)取移動(dòng)端的麥克風(fēng)進(jìn)行錄音并播放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06Unity實(shí)現(xiàn)3D貪吃蛇的移動(dòng)代碼
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)3D貪吃蛇的移動(dòng)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04C#流類(lèi)FileStream學(xué)習(xí)使用筆記
這篇文章主要介紹了C#流類(lèi)FileStream學(xué)習(xí)使用筆記,本文直接給出示例代碼,代碼中每一步都有詳細(xì)注釋,需要的朋友可以參考下2015-06-06解析在內(nèi)部循環(huán)中Continue外部循環(huán)的使用詳解
本篇文章是對(duì)在內(nèi)部循環(huán)中Continue外部循環(huán)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05關(guān)于Unity C# Mathf.Abs()取絕對(duì)值性能測(cè)試詳解
這篇文章主要給大家介紹了關(guān)于Unity C# Mathf.Abs()取絕對(duì)值性能測(cè)試的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Unity C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04深入分析NTFS中文件被鎖定導(dǎo)致Process.Start失敗的詳解
本篇文章是對(duì)NTFS中文件被鎖定導(dǎo)致Process.Start失敗進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05Unity實(shí)現(xiàn)多平臺(tái)二維碼掃描
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)多平臺(tái)二維碼掃描,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07