學習Linq之前必須知道的幾種語法糖

来源:https://www.cnblogs.com/lxshwyan/archive/2019/05/06/10822169.html
-Advertisement-
Play Games

» 引用百度解釋: 語法糖(Syntactic sugar),也譯為糖衣語法,是由英國電腦科學家彼得·約翰·蘭達(Peter J. Landin)發明的一個術語,指電腦語言中添加的某種語法,這種語法對語言的功能並沒有影響,但是更方便程式員使用。通常來說使用語法糖能夠增加程式的可讀性,從而減少程式 ...


     » 引用百度解釋: 語法糖(Syntactic sugar),也譯為糖衣語法,是由英國電腦科學家彼得·約翰·蘭達(Peter J. Landin)發明的一個術語,指電腦語言中添加的某種語法,這種語法對語言的功能並沒有影響,但是更方便程式員使用。通常來說使用語法糖能夠增加程式的可讀性,從而減少程式代碼出錯的機會。   

      » 用一句話來簡單描述:給我們帶來方便的快捷寫法,編譯器會幫我們做轉換,而且可以提高開發編碼的效率,在性能上也不會帶來損失

      » c#有很多種語法糖,接下來主要來講一下與Linq有關的一些語法糖(Lambda表達、自動屬性、擴展方法、var、對象或集合初始化器、匿名類等)

      1、Lambda表達式已經在上上一篇單獨講過它的演變由來https://www.cnblogs.com/lxshwyan/p/10815138.html

      2、擴展方法在上一篇分三個部分講過(在C#3.0之前沒有擴展方法的狀態(或者你不會使用不知道擴展方法的時候)、擴展方法的語法及怎麼使用、怎麼正確的使用擴展方法https://www.cnblogs.com/lxshwyan/p/10815731.html 

      3、自動屬性

       之前我們封裝屬性快捷鍵:Ctrl+R+E =>彈出封裝好的屬性

       自動屬性快捷鍵:輸入字母 PROP+按兩次Tab      

        /// <summary>
        /// 封裝屬性
        /// </summary>
        private string _userName;
        public string UserName
        {
            get { return _userName; }
            set { _userName = value; }
        }
        /// <summary>
        /// 自動屬性
        /// </summary>
        public string Password { get;  set; }

   自動屬性和封裝屬性相比沒有從功能上沒有區別,也能對set或get屬性進行訪問控制  

/// <summary>
        /// 封裝屬性
        /// </summary>
        private string _userName;
        public string UserName
        {
            get { return _userName; }
            protected  set { _userName = value; }
        }
        /// <summary>
        /// 自動屬性
        /// </summary>
        public string Password { get; protected set; }

    4、對象初始化器({})

          之前我們對一個對象賦賦初始值的時候必須這樣寫

            UserInfo user1 = new UserInfo();
            user1.UserName = "lxsh";
            user1.PassWord = "123456";
            user1.Age = 25;
            user1.Gender = 1;

   現在使用對象初始化器後,可以這樣寫,但使用對象初始化器的對象必須有一個無參的構造函數

    //屬性之前必須用逗號隔開,最後一個逗號可以省略        
UserInfo user2 = new UserInfo() { UserName = "lxsh", PassWord = "123456", Age = 25, Gender = 1, };

   5、集合初始化器和對象初始化器類似({})

  //之前我們使用集合對集合給初始化值的時候,只能一個一個add
            List<UserInfo> userInfos1 = new List<UserInfo>();
            userInfos1.Add(new UserInfo() { UserName = "lxsh" });
            userInfos1.Add(new UserInfo() { UserName = "wy" });
            userInfos1.Add(new UserInfo() { UserName = "ly" });

            //現在使用集合初始化器的,可以不必聲明定義單個對象
            List<UserInfo> userInfos2 = new List<UserInfo>()
            {
                new UserInfo() { UserName = "lxsh" },
                new UserInfo() { UserName = "wy" },
                new UserInfo() { UserName = "ly" } 
            };

  6、匿名類型(Var)

          C#var和JS裡面var含義不一樣,它有以下幾個特點:

          √ 它必須是定義的時候必須初始化值,不然會報錯(不能其他類型一樣先定義後賦值)

          √ 一旦初始化值後,它已經隱使推導出該變數類型,不能再給他賦值其他類型的值

          它是局部變數,不能有public等其他訪問修飾符

          √ 它類似object,但不同於object;它在效率上和使用強類型方式定義變數完全一樣

               var i=0;與int i=0;其實就是一樣,編譯器自動會把var i=0變成int i=0(所以它在編譯過程中轉換的,沒有裝箱拆箱的過程,和object不一樣)

        7、匿名類new{}

           匿名類在linq選擇指定類型返回數據 select new { Name = "lxsh" + s.StudentName, Age = s.Age } 及與返回接收匿名類型var經常會一起使用

     簡單講有時我們需要類似上面返回的數據,在以前如果沒有匿名類我們只能單獨定義一個類來封裝Name、Age的屬性類,來接收這些數據,但這樣類型數據我們可能只在當前程式中使用,不需要項目間重用,只在這一個地方使用, 單獨定義一個類顯然比較麻煩,如果我們想增加屬性還得再去修改該類,這樣顯然比較麻煩,影響效率;

     現在有了匿名類型,我們就不需要單獨定義一個類來封裝我們想要的屬性;

 var student = new { name = "lxsh", age = 18 };
            Console.WriteLine(student.name);
            Console.WriteLine(student.age);

 當我們想對student多加一個性別屬性時 只需要簡單修改就可以

var student = new { name = "lxsh", age = 18,gender=1 };
            Console.WriteLine(student.name);
            Console.WriteLine(student.age);
            Console.WriteLine(student.gender);

    8、內置泛型委托Action<T>(不能有返回值)

     Action一共有16種泛型委托,從一個參數到16個參數的無返回值委托

    9、內置泛型委托Func<T>(有返回值) 

       Func一共有16種泛型委托,從一個參數到16個參數的有返回值委托 

  Action<T>、Func<T>其實就是C#幫我們封裝了有返回值和無返回值的委托類型,我們不需要單獨去定義委托類型,用的時候只需實例化就可以 ,在這以前我們每次用委托還要單獨去創建委托類型, 

 -------瞭解了以上知識接下來我和大家一起來學習一下Linq語法

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在Laravel項目中我們常常需要定義一些全局的公共函數,通常我們會將這些公共函數定義在一個單獨的文件里,如 中。我們在 目錄下創建一個名為 的文件(app/helpers.php),並編輯其內容如下: 該函數返回對一個字元串進行兩次md5加密後返回的字元串。要讓應用能夠正確找到 文件,還要修改項目 ...
  • 什麼是棧? 定義: 一種運算受限的線性表。其限制是僅允許線上性表的一端進行插入和刪除運算。可操作的一端被稱為棧頂,相對地,把另一端稱為棧底,棧底不可進行操作。 所以棧中的數據遵循 “先進後出” 即只能操作棧頂的數據。 分類: (1)靜態棧:以數組作為數據的存儲。 (2)動態棧:以鏈表作為數據的存儲方 ...
  • 一個程式用到java的cn.core.jar加密的,需要在.NET 中解密,發現JAVA的des演算法與C 的有點區別。 自己不太懂加密解密演算法,所以找了個省事的方法,用IKVM.NET,用這個將cn.core.jar直接轉為cn.core.dll。 在程式中可以直接用cn.core.jar中的方法, ...
  • 如果使用allAnswer.clean()函數,則接收的數據Session["ReAllAnswer"]將會設置為空; 而使用new List<Item>(),則不會。 ...
  • 今天,我們宣佈 .NET Core 3.0 之後的下一個版本將是 .NET 5 。這將是 .NET 系列的下一個重要版本。 ...
  • CPU Usage ​ ● GC Alloc - 記錄了游戲運行時代碼產生的堆記憶體分配。這會導致ManagedHeap增大,加速GC的到來。我們要儘可能避免不必要的堆記憶體分配,同時註意:1、檢測任何一次性記憶體分配大於2KB的選項;2、檢測每幀都具有20B以上記憶體分配的選項。 ● WaitForTar ...
  • /// <summary> /// 日誌處理幫助類 /// </summary> public class LogHelper { private static Queue<string> ErrorQueue = new Queue<string>(); static Action<string> ...
  • (採用微軟公司驅動) 1.打開vs點擊工具: 點擊連接到資料庫: 選擇紅線內選項,同時在右邊點擊下載(博主已下載過了,所以右側沒有下載選項) 2.安裝好後參照oracle的安裝目錄下的 tnsnames.ora文件的最後一段修改Oracle Developer Tools for Visual St ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...