首頁 > 軟體

C#中的var關鍵字用法介紹

2022-08-27 14:01:04

從.NET 3.0開始,在方法內部可以使用var關鍵字宣告區域性變數。var關鍵字到底是什麼?在何種情況下使用呢?

var關鍵字用來隱式地宣告一個資料型別,變數型別是在編譯期確定的,而不是在執行時確定的

宣告一個var變數a,把整型數10賦值給a,接著把一個字串賦值給變數a。執行發現報錯:無法將型別string隱式轉換為int。

宣告一個var變數a,把整型數10賦值給a,接著把一個字串賦值給變數a。執行發現報錯:無法將型別string隱式轉換為int。

這說明:用var宣告一個變數時,雖然不是顯式宣告,但在編譯期,已經確定了變數的型別。

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

→把a = "abc";這行程式碼去掉,並生按F6生成解決方案。
→開啟"VS2012開發人員命令提示",輸入如下命令

→在"解決方案資源管理器"中右鍵專案的名稱,選擇"在檔案資源管理器中開啟資料夾",再點選bin,Debug資料夾,在位址列中賦值Debug資料夾的路徑
→點選"IL DASM"的檔案--開啟,輸入剛才拷貝的Debug資料夾路徑,再選擇.exe字尾的可執行檔案,雙擊"Main:void(string[])"。在IL程式碼中:

可以看出:變數a已經是Int型別,並且是一個區域性變數。

var關鍵字讓編碼更簡短

對於一些名稱比較長的類,當建立類範例的時候,用var關鍵字看上去更簡短。當然這個理由是比較牽強的~~

     class Program
    {
        static void Main(string[] args)
        {
            HelloIHaveALongLongName<string, string> obj = new HelloIHaveALongLongName<string, string>();
        }
    }
    public class HelloIHaveALongLongName<T, T>
    {
        public string Name;
    }

如果使用var關鍵字,就變成:

var obj = new HelloIHaveALongLongName<string, string>();
obj.Name = "hello";

可見,用var關鍵字,讓寫法更簡短,並且var變數是一個強型別。

var關鍵字與匿名型別

通過LINQ表示式返回一個匿名型別。

        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並不是一個強型別變數。

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

如果用var關鍵字來接收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接收匿名型別集合,該集合的每個元素也是強型別。也就是說,編譯器在編譯的時候自動推斷型別。

總結:

  • 通過var關鍵字宣告的變數,變數型別是在編譯期確定的,而不是在執行時確定
  • 對於LINQ表示式返回的匿名型別,可以用var關鍵字宣告的變數接收
  • 對於一些名稱比較長的類,類範例化的時候,可以用var關鍵字宣告的變數接收

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對it145.com的支援。如果你想了解更多相關內容請檢視下面相關連結


IT145.com E-mail:sddin#qq.com