" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中的var關(guān)鍵字用法介紹

 更新時(shí)間:2022年08月27日 09:38:33   作者:Darren Ji  
這篇文章介紹了C#中的var關(guān)鍵字用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

從.NET 3.0開始,在方法內(nèi)部可以使用var關(guān)鍵字聲明局部變量。var關(guān)鍵字到底是什么?在何種情況下使用呢?

var關(guān)鍵字用來隱式地聲明一個(gè)數(shù)據(jù)類型,變量類型是在編譯期確定的,而不是在運(yùn)行時(shí)確定的

聲明一個(gè)var變量a,把整型數(shù)10賦值給a,接著把一個(gè)字符串賦值給變量a。運(yùn)行發(fā)現(xiàn)報(bào)錯(cuò):無法將類型string隱式轉(zhuǎn)換為int。

聲明一個(gè)var變量a,把整型數(shù)10賦值給a,接著把一個(gè)字符串賦值給變量a。運(yùn)行發(fā)現(xiàn)報(bào)錯(cuò):無法將類型string隱式轉(zhuǎn)換為int。

這說明:用var聲明一個(gè)變量時(shí),雖然不是顯式聲明,但在編譯期,已經(jīng)確定了變量的類型。

通過反編譯同樣可以證明以上推斷。

→把a(bǔ) = "abc";這行代碼去掉,并生按F6生成解決方案。
→打開"VS2012開發(fā)人員命令提示",輸入如下命令

→在"解決方案資源管理器"中右鍵項(xiàng)目的名稱,選擇"在文件資源管理器中打開文件夾",再點(diǎn)擊bin,Debug文件夾,在地址欄中賦值Debug文件夾的路徑
→點(diǎn)擊"IL DASM"的文件--打開,輸入剛才拷貝的Debug文件夾路徑,再選擇.exe后綴的可執(zhí)行文件,雙擊"Main:void(string[])"。在IL代碼中:

可以看出:變量a已經(jīng)是Int類型,并且是一個(gè)局部變量。

var關(guān)鍵字讓編碼更簡短

對于一些名稱比較長的類,當(dāng)創(chuàng)建類實(shí)例的時(shí)候,用var關(guā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";

可見,用var關(guān)鍵字,讓寫法更簡短,并且var變量是一個(gè)強(qiáng)類型。

var關(guān)鍵字與匿名類型

通過LINQ表達(dá)式返回一個(gè)匿名類型。

        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類型變量o并不是一個(gè)強(qiáng)類型變量。

如果我們用強(qiáng)類型的類來接收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>類型集合中,每一個(gè)集合元素都是強(qiáng)類型。

如果用var關(guān)鍵字來接收LINQ返回的匿名類型集合。

    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類型變量o接收匿名類型集合,該集合的每個(gè)元素也是強(qiáng)類型。也就是說,編譯器在編譯的時(shí)候自動推斷類型。

總結(jié):

  • 通過var關(guān)鍵字聲明的變量,變量類型是在編譯期確定的,而不是在運(yùn)行時(shí)確定
  • 對于LINQ表達(dá)式返回的匿名類型,可以用var關(guān)鍵字聲明的變量接收
  • 對于一些名稱比較長的類,類實(shí)例化的時(shí)候,可以用var關(guān)鍵字聲明的變量接收

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

最新評論