C# 學習經驗分享

微軟技術棧發表於2022-04-17

.NET 20 週年的學習挑戰賽剛結束了第⼀階段, 不知道各位⼩夥伴參加了沒有?有⼈問現在學習 C# 是不是有點過時?也有⼈問現在 C# 能做什麼?更有⼈問學習 C# 能否找到⼯作?或者你從不同的專家,不同的從業者可以有不同的答案。但我更關⼼⼀個⽐較基礎⽽且對更多⼈希望得到解答的問題 - 如何學習好 C#。我是⼀名 .NET ⽼兵,雖然我的技術棧不斷拓寬,但從來沒有放棄 C#。希望利⽤該⽂章,和⼤家分享⼀ 些 C# 學習⼼得。

學習環境

早期學習 C#,相信⼤家都喜歡去 Windows 安裝 Visual Studio 或者基於 mono 在 macOS / Linux 下安裝 MonoDevelop IDE。但 .NET 開源後, 學習 C# 就不僅可以在 Windows, 還可以在 macOS / Linux 下進⾏學習,開發的環境除了 Visual Studio 外,還增加了 Visual Studio Code,還有像第三⽅的 JetBrains 的 Rider IDE 等。實際上學習程式設計語⾔除了這些 IDE 外,我建議⼤家使⽤ REPL 或者 .NET Interactive 來學習 C#,更為有效。

▌REPL

什麼是 REPL

REPL(發⾳ “REP-UL”)是⼀種程式設計語⾔與計算機對話的互動式⽅式。早期應⽤在 Python 中,現在很多程式設計語⾔都⽀持 REPL。實際上 REPL 做了四個步驟:

  1. Read - 讀⼊⽤戶的輸⼊程式碼(如輸⼊的 C# 語句)。
  2. Evaluate - 評估輸⼊程式碼(檢查語法 / 瞭解程式碼意思)。
  3. Print - 列印執⾏結果結果。
  4. Loop - 繼續互動,迴圈 1,2,3 步的⼯作。

在早期,我⽤過最好的 REPL 是Xamarin 的 Workbooks。它不但可以運⾏ C# 的程式碼,也可以寫⼀些如Xamarin for iOS,Xamarin for Android,Xamarin Forms 等效果,也可以引⼊⼀些第三⽅庫實現⼀些效果。這對於初期開發,和跨平臺移動應⽤原型開發有很多的幫助。

要在 .NET 使⽤ REPL,你可以使⽤第三⽅的 REPL ⼯具,在終端執⾏以下命令

dotnet tool install --global dotnet-repl

安裝成功後,在終端下輸⼊以下命令就可以進⼊ REPL 環境了

dotnet repl

進⼊後,你可以在⾥⾯輸⼊任意程式碼塊,來完成運⾏

當然你也可以在 REPL 內通過 nuget 增加相關的第三⽅庫/包進⾏測試 , 如 OpenCVSharp

如果你不喜歡⽤命令⾏的⽅式,介紹⼀個官⽅的⼯具 .NET Interactive,它是⾮常好⽤的 .NET 體系下的 REPL 互動式視覺化⼯具。你可以通過在 Visual Studio Code 中安裝 .NET Interactive Notebooks外掛。(如果你希望瞭解更詳細的安裝⽅法,以及使⽤可以閱讀我之前寫的這篇⽂章 .NET Interactive環境介紹

Lambda 和 LINQ 是 C# 的語法之美

每個語⾔都有各⾃的優缺點,和各⾃的應⽤場景,傳統的型別表示,條件 / 迴圈語句, 還有型別描述,每個語⾔都有,但 C# 我覺得最優雅的地⽅是 Lambda 表示式 和 LINQ。這也是我⾮常推薦⼊⻔的⼩夥伴精讀的內容。

▌Lambda 表示式

Lambda 表示式是⼀⼩段程式碼,它接受引數並返回⼀個值。Lambda 表示式類似於⽅法,但它們不需要名稱,並且可以直接在⽅法體中實現。C# 在 2.0 的版本上,已經⽀持了 Lambda 表示式,⽐很多程式設計語⾔都要早。

C# 中的 Lambda 表示式與匿名函式⼀樣使⽤,不同之處在於,在 Lambda 表示式中您不需要指定輸⼊值的型別,因此使⽤起來更加靈活。‘=>ʼ 是⽤於所有 lambda 表示式的 lambda 運算子。Lambda表示式分為兩部分,左邊是輸⼊,右邊是表示式。

  • 表示式 lambda,表示式為其主體:
(input-parameters) => expression

如:

  • 語句 lambda,語句塊作為其主體:
(input-parameters) => { <sequence-of-statements> }

如:

如果您打算在程式碼中使⽤ LINQ,那麼 Lambda 表示式將是您最喜歡的夥伴。幫助您將程式碼邏輯包裝在更少的⾏或內聯中。

▌LINQ 語⾔

LINQ 是⼀系列直接將查詢功能整合到 C# 語⾔的技術統稱。LINQ 也是在 C# 2.0 中誕⽣,應⽤在 SQL 資料 庫、XML ⽂檔、以及各種 Web 服務中。藉助 LINQ,查詢成為了最⾼級的語⾔構造,就像類、⽅法和事件⼀樣。

如:

我個⼈⽐較喜歡⽤ LINQ to SQL 的語法, 節約了不少寫 T-SQL 語句的時間

using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    IQueryable<string> query = from p in context.Products
                               where p.Name == "Reflector"
                               select p.Name;
​
    IEnumerable<bool> q = query.Select(c => c.EndsWith("Reflector "));
​
    Console.WriteLine("LINQ to Entities returns: " + q.First());
    Console.WriteLine("CLR returns: " + "Reflector".EndsWith("Reflector "));
}

學會使⽤ Nuget NuGet

學會使⽤ Nuget NuGet 是 .NET 的包管理器。NuGet 客戶端⼯具提供了⽣成和使⽤包的能⼒。NuGet 庫是所有包作者和使⽤者使⽤的中央包儲存庫。你可以通過 NuGet 下載很多不同場景的包進⾏場景應⽤。

像⼀些⼩夥伴,在直播提到的爬⾍,這⾥就可以利⽤ Nuget 通過第三⽅的包 Abot (瞭解更多請訪問 )來完成。

怎麼寫好 C

每⼀個程式設計語⾔,都有⾃⼰的編寫規範, 也是評價好的程式碼的標準。在官⽅有⾮常好的編碼規則建議⼤家閱讀,這對寫好 C# 的程式碼⾮常有幫助,你也可以多看看 GitHub 上的開源項⽬,也會有很⼤幫助。

後記

新⼀代的 .NET 很吸引,涵蓋了多個應⽤場景。C# 作為⾮常重要的 .NET 程式設計語⾔, 也是⼤家⼊⻔的必修課。希望⼤家通過該⽂章能掌握好學習 C# 的⼀些⼯具, 程式設計技巧以及相關的要點。當然我也希望各位繼續參加 .NET 20 週年的學習挑戰賽 - ASP.NET Core 開發 。

4月6日-4月24日,複製連結 https://aka.ms/CSCdotNETCore 到瀏覽器,或點選可參與,你可以有機會獲得.NET 20週年周邊禮包、.NET專業書籍,以及.NET Conf China 2022門票!

相關學習資源

  1. C# 學習
  2. C# Lambda 表示式
  3. C# LINQ 表示式
  4. NuGet 相關知識

相關文章