跳過到頁腳內容
Iron Academy Logo
學習 C#
學習 C#

其他分類

14 種簡化 C# 代碼的方法—來自 Tim Corey 視頻的 C# 最佳實踐見解

Tim Corey
44分57秒

在他全面的影片"簡化C#程式碼的14種方法"中,Tim Corey 探討了實用的 C# 最佳實踐,這些實踐可以提高代碼可讀性、減少雜亂並保持您的代碼庫可維護。 Tim專注於良好的編碼實踐,而不是痴迷於單行或晦澀的技巧——如何編寫其他開發者可以遵循的乾淨、可理解的代碼。

他圍繞 Visual Studio 中的實際示例來框定每個提示,涉及命名約定、錯誤處理,甚至如何在不破壞事物的情況下重構代碼。 這不僅僅是理論——這是關於實踐讓代碼更好。

在這篇文章中,讓我們一步步回顧他展示的14種方法。

1. 使用靜態來簡化代碼

Tim首先展示了如何通過靜態訪問來簡化重複調用。 使用聲明:

using static System.Console;
using static System.Console;

您不再需要在每個靜態成員前加上 Console。

這不僅僅是去掉詞語——而是在於使得靜態訪問清晰。 Tim指出,如果您正在調用一個常用類比如 Console 或 Math 的靜態成員,這種簡寫可以改善代碼的可讀性。

然而,作為良好的編碼習慣的一部分,他警告開發人員要避免衝突——可能有兩個不同的類擁有相同名稱的靜態成員。 對潛在意外行為的意識是關鍵。

2. 使用初始化列表

C# 現在讓您可以更直接地初始化列表:

List<string> names = ["Tim", "Sue", "Bilbo"];
List<string> names = ["Tim", "Sue", "Bilbo"];

Tim解釋這並不是要把一切都壓縮成一個語句——而是要編寫更易讀的代碼,通過減少繁瑣提高性能。

與其分析出"新的字符串列表"樣板,讀者可以直接看到重要的:集合中的描述性名稱。 Tim還指出,這也適用於數組甚至字典,符合強調清晰度的編碼約定。

3. 目標類型化的new

另一個省時的方法:目標類型化的 new。 與其:

List<int> numbers = new List<int>();
List<int> numbers = new List<int>();

您可以寫:

List<int> numbers = new();
List<int> numbers = new();

Tim強調重複類名稱是沒有必要的——它已經在左邊。這遵循了良好的編碼實踐,通過消除冗餘使代碼庫更易於掃描。

4. var 和匿名類型

Tim探討了 var,一個在編碼練習圈中引發爭論的功能。 有些人不喜歡它隱藏變量名稱和類型,但Tim澄清它真正的力量在於匿名類型。

當與數據源(如 SQL 通過 Dapper)一起工作時,Tim展示了 var 如何讓您隨時創建對象:

var parameters = new { FirstName = "Tim", LastName = "Corey" };
var parameters = new { FirstName = "Tim", LastName = "Corey" };

這是寫查詢或一次性對象的理想選擇——您不需要僅僅為參數創建一個基類。 正如Tim所說,這避免了不必要的類型污染您的代碼庫,同時仍能在出現問題時提供有意義的錯誤信息。

5. 文件範圍命名空間

Tim移到文件範圍命名空間,展示了如何從這樣:

namespace ProjectName
{
    // indented code
}
namespace ProjectName
{
    // indented code
}

變成這樣:

namespace ProjectName;
namespace ProjectName;

這個小改動消除了浪費的縮排,並遵循 C# 命名約定,如公共成員的 Pascal 命名法。 Tim解釋,因為大多數文件只包含一個命名空間,這提高了代碼可讀性,並保持邏輯部分對齊。

6. 用記錄定義單行數據結構

使用記錄讓您可以在一個語句中定義數據對象:

public record EmployeeRecord(int Id, string Name);
public record EmployeeRecord(int Id, string Name);

Tim指出這會自動生成完整的類型——屬性、不變性和 ToString()——並帶來極小的努力。 他明確指出派生類場景仍然需要類,但當您的對象是只讀時,記錄會按照單一責任原則做到一件事做好。

7. 模式匹配

Tim展示了如何使用模式匹配幫助您安全地處理異常和執行比較。 與其寫冗長的類型檢查,您可以這樣組合它們:

if (emp is EmployeeRecord e)
{
    e.Id = 1;
}
if (emp is EmployeeRecord e)
{
    e.Id = 1;
}

這一行就能檢查和轉換。 Tim說這符合好的編碼實踐—您避免單字母變量名如x或y,而是給予有描述性的名字如e。 清晰的方法名稱和變量名稱使得其他開發人員更易於維護代碼。

8. 字符串插值

為構建可讀的字符串,Tim展示了字符串插值:

$"The employee with ID {e.Id} is {e.Name}"
$"The employee with ID {e.Id} is {e.Name}"

他指出這使得有意義的錯誤信息和寫註釋更容易。 與其糾結於拼接,你可以直接寫代碼,讀起來像英文—提高代碼質量並簡化未來檢查輸出的單元測試。

9. 使用 nameof() 進行安全重構

Tim展示了如何在重構代碼時使用 nameof() 保護自己。 字符串中的硬編碼變量名如被重命名可能導致意外行為。 但通過這樣寫:

nameof(emp)
nameof(emp)

編譯器會自動更新每個用法。 這是保持代碼庫健康的最佳實踐之一,當您編寫乾淨並重組代碼時。

10. 使用元組返回多個值

Tim使用元組來避免僅僅為了返回兩個值而創建基類:

(string FirstName, string LastName) SplitName(string fullName)
(string FirstName, string LastName) SplitName(string fullName)

這避免了不必要的外部依賴,並遵循單一責任原則——方法僅分割一個名字,不多於此。 正如Tim所說,避免過度設計的實踐讓代碼更好。

11. 解構

基於元組,Tim展示了如何將結果解構到本地變數中:

var (firstName, lastName) = SplitName("Tim Corey");
var (firstName, lastName) = SplitName("Tim Corey");

這保持變量名稱描述性並避免後來的晦澀元組語法。 Tim甚至提到丟棄未使用的值(使用 _),這表示意圖—沒有未解釋的單字母變量名留下。

12. 為不需要的值進行丟棄

如果您不需要所有的元組部分,Tim建議丟棄:

var (firstName, _) = SplitName("Tim Corey");
var (firstName, _) = SplitName("Tim Corey");

這告訴其他開發者您是有意忽略某個值—這對測試框架或單元測試很有用,那裡並不是所有輸出都重要。

13. 不含塊的 using 語句

Tim進入資源管理和錯誤處理。 以前,您可能會這樣寫:

using (var connection = new SqlConnection(connString))
{
    // work
}
using (var connection = new SqlConnection(connString))
{
    // work
}

現在,您可以這樣使用:

using var connection = new SqlConnection(connString);
using var connection = new SqlConnection(connString);

這符合SOLID原則——特別是單一責任原則和依賴反轉原則。 Tim指出這種語法適用於像數據庫這樣的外部依賴,確保大多數異常處理更清晰和連接始終關閉,避免性能問題甚至SQL注入場景,當連接沒有被釋放時。

14. 內聯out變量聲明

最後,Tim介紹了內聯out變量聲明用於解析:

if (int.TryParse(numberText, out int numberValue))
if (int.TryParse(numberText, out int numberValue))

在這裡,您在同一行創建局部變量。這使編碼約定緊密和方法名稱描述性。通過正確分組代碼,您減少了意外行為並使未來的重構代碼工作更安全。

總結

Tim在他影片的結尾提醒觀眾:這些簡化不是在於寫晦澀的單行—而是關於良好的編碼慣例。 使用靜態、記錄、模式匹配、元組和丟棄等功能讓您寫出乾淨、現代的 C#。

他鼓勵開發者在採用這些功能時思考命名約定、錯誤處理和有意義的名字。 "代碼是為人類閱讀而設計的,"Tim說—當您編寫容易理解的代碼時,您為自己和其他開發者改善了生活。

簡而言之:採用這些 C# 最佳實踐,遵循SOLID原則如單一責任原則、介面隔離原則和依賴反轉原則,您的代碼不僅能編譯—它將提升性能、減少意外行為並保持您的團隊快樂地編寫代碼。

Hero Worlddot related to 14 種簡化 C# 代碼的方法—來自 Tim Corey 視頻的 C# 最佳實踐見解
Hero Affiliate related to 14 種簡化 C# 代碼的方法—來自 Tim Corey 視頻的 C# 最佳實踐見解

通過分享您所愛的東西賺得更多

您是否在為使用.NET、C#、Java、Python或Node.js的開發者創建內容?將您的專業知識轉化為額外收入!

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我