微軟有一個 System.Net.Mail.SmtpClient 類別,被建議說不要在新開發的應用程式中使用,並且給了非常明確的指示「請改用 MailKit
」,MailKit 是建構在 MimeKit 上面的一個跨平台郵件發送套件,既然微軟爸爸都這麼說了,我們直接上手。
[小菜一碟] 使用 C# 將民國日期的字串轉換成西元日期
四年一次會出現的不是只有總統大選,還有 2 月 29 日的問題,程式如果寫得不夠久大概也不會遇到,像今年就有可能會收到像是「113/02/29
」、「113年2月29日
」這樣的日期字串,在 C# 中如果直接先轉成西元日期的 113/02/29,再加上 1911 年,像這樣:
DateTime.ParseExact("113/02/29", "yyy/MM/dd", null).AddYears(1911);
那我們的程式應該已經爆了,因為西元 113 年沒有 2 月 29 日,關於閏年的問題,在 C# 我們有更優雅的做法。
[小菜一碟] 手動為 Windows Form 應用程式加入組態設定轉換(Configuration Transform)
有開發過 ASP.NET 網頁應用程式的朋友,應該對 Web.Config
、Web.Debug.Config
、Web.Release.Config
這三個設定檔不陌生,在建置專案的時候,建置程序會依據組態(Debug|Release)進行設定轉換,產出專屬於該組態的 Web.Config,如果換作是 Windows Form 應用程式的 App.Config 的話,該怎麼做?
[食譜好菜] 用 C# 來實作 B+Tree(B Plus Tree)資料結構
[食譜好菜] 用 C# 來實作 B-Tree 資料結構
[小菜一碟] 發現一個 C# ValueTuple 方便的應用 - Swap
從 C# 7.0 開始多了一個 - ValueTuple 的實值型別可以用,有用過的朋友應該都能感覺出其方便之處,尤其在撰寫多值回傳方法的時候,除了可以減少宣告過渡型類別的數量之外,還能避免在方法簽章中宣告多個 out 參數,沒想到它還可以簡化 Swap 程式碼。
[小菜一碟] .NET Framework 能不能用新版 System.Text.Json 的 JsonNode、JsonObject、JsonArray、JsonValue?
以往在 Json.NET 有 JToken
、JObject
、JArray
、JValue
這些類別,可以讓我們在反序列化 JSON 的時候,不必一定要為其結構新增對應的型別,2021 年 11 月 .NET 6 釋出之後,內建的 System.Text.Json 也隨之升級,增加了 JsonNode
、JsonObject
、JsonArray
、JsonValue
,與 Json.NET 的那四個類別相對應,那我想要在 .NET Framework 使用 System.Text.Json 行不行?
[食譜好菜] 用 C# 搭配 DNS 套件寫一個 DNS 服務
拜讀了一篇圖文並茂講解 DNS 查詢的文章之後,覺得好像可以自己動手寫一個 DNS 服務,但其實 Windows Server 幾乎都已經內建 DNS 服務,即使是 Linux 也有相對應的 DNS 套件,裝一下就可以用了,所以這篇文章雖然說要撰寫一個 DNS 服務,不過也就是當好玩,拿來練練手而已。
[食譜好菜] 在 C# 中能將集合轉化為一切的擴充函式 - Aggregate
如果有一天,微軟讓大家在 C# 裡面 Enumerable 眾多的擴充函式當中選一個留下來,我想我會選 Aggregate(),Aggregate() 算是一個滿萬用的擴充函式,從 .NET Framework 3.5 開始就一直存在,它只有三個多載方法,要額外丟的參數最多也只要三個,結構上算是簡單,但運用起來卻能千變萬化。
[食譜好菜] C# 兩個集合的 JOIN,一對一、一對多、單鍵值、多鍵值一次介紹。
不知道各位朋友在 C# 裡面,要將兩個集合 JOIN 起來使用時,是怎麼處理的? 假定我有一個 Employee
類別,有一個 Department
的屬性,Department 的內容需要透過另一個屬性 DepartmentId
到 Department 的集合當中去查找,如果各位朋友習慣上是使用類似下面寫法的話,可以嘗試改用另一種方法。
foreach (var employee in employees)
{
employee.Department = departments.Single(dep => dep.Id == employee.DepartmentId);
}