跳至頁尾內容
Iron Academy Logo
學習C#
學習C#

其他類別

14種簡化您的C#程式碼的方法 — Tim Corey影片中的C#最佳實踐資訊

Tim Corey
44m 57s

在他的全面影片"簡化您的C#程式碼的14種方法"中,Tim Corey 探討了可以提高程式碼可讀性、減少混亂並保持程式碼基礎可維護的實用C#最佳實踐。 Tim集中於良好的編碼習慣,而不是對一行程式或神祕技巧的痴迷——如何編寫乾淨、易於理解的程式碼,以便其他開發者能夠跟隨。

他以Visual Studio中的真實例子為基礎構建每個技巧,並涵蓋命名慣例、錯誤處理,甚至如何重構程式碼而不破壞內容。 這不僅僅是理論——這是關於實踐使程式碼變得更好。

在這篇文章中,讓我們逐步了解他展示的14種方法。

1. 使用Static以獲得更乾淨的程式碼

Tim首先展示如何透過static存取來簡化重複調用。 通過聲明:

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

您不再需要為每個static成員加上Console前綴。

這不僅僅是去掉字詞——它關乎讓static存取物件更加清晰。 Tim指出,如果您正在調用像Console或Math這樣經常使用的類中定義的static成員,這種簡寫可以提高程式碼可讀性。

然而,作為良好編程實踐的一部分,他警告開發者應避免衝突——兩個不同的類可能具有相同名稱的static成員。 意識到潛在的意外行為是關鍵。

2. 使用List初始化

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

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

Tim解釋這不僅僅是將所有內容壓縮為一條語句——這涉及編寫更易於閱讀的程式碼,並通過減少繁文縟節來提升性能。

讀者不必解析出"new List of String"的樣板語句,可以直接看到重要的內容:集合中的描述性名稱。 Tim 也指出這對陣列甚至是字典同樣適用,與優先考慮清晰度的編碼慣例一致。

3. 目標型別的新

另一個時間節省者:目標型別的新。 代替:

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澄清其真正的力量在於匿名型別。

當與資料源(如透過Dapper的SQL)一起工作時,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. 無區域的使用語句

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 在他的影片中結束時提醒觀眾:這些簡化方法並不是要寫出晦澀的一行語句——而是關於良好的編程習慣。 像static使用、記錄、模式匹配、元組以及丟棄這樣的功能讓您可以編寫出乾淨、現代的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 的開發者建立內容?將您的專業知識轉化為額外收入!

Iron 支援團隊

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