Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
44m 57s
在他的全面影片"簡化您的C#程式碼的14種方法"中,Tim Corey 探討了可以提高程式碼可讀性、減少混亂並保持程式碼基礎可維護的實用C#最佳實踐。 Tim集中於良好的編碼習慣,而不是對一行程式或神祕技巧的痴迷——如何編寫乾淨、易於理解的程式碼,以便其他開發者能夠跟隨。
他以Visual Studio中的真實例子為基礎構建每個技巧,並涵蓋命名慣例、錯誤處理,甚至如何重構程式碼而不破壞內容。 這不僅僅是理論——這是關於實踐使程式碼變得更好。
在這篇文章中,讓我們逐步了解他展示的14種方法。
Tim首先展示如何透過static存取來簡化重複調用。 通過聲明:
using static System.Console;Imports System.ConsoleImports System.Console您不再需要為每個static成員加上Console前綴。
這不僅僅是去掉字詞——它關乎讓static存取物件更加清晰。 Tim指出,如果您正在調用像Console或Math這樣經常使用的類中定義的static成員,這種簡寫可以提高程式碼可讀性。
然而,作為良好編程實踐的一部分,他警告開發者應避免衝突——兩個不同的類可能具有相同名稱的static成員。 意識到潛在的意外行為是關鍵。
C# 現在讓您能夠更直接地初始化列表:
List<string> names = ["Tim", "Sue", "Bilbo"];List<string> names = ["Tim", "Sue", "Bilbo"];Dim names As New List(Of String) From {"Tim", "Sue", "Bilbo"}Dim names As New List(Of String) From {"Tim", "Sue", "Bilbo"}Tim解釋這不僅僅是將所有內容壓縮為一條語句——這涉及編寫更易於閱讀的程式碼,並通過減少繁文縟節來提升性能。
讀者不必解析出"new List of String"的樣板語句,可以直接看到重要的內容:集合中的描述性名稱。 Tim 也指出這對陣列甚至是字典同樣適用,與優先考慮清晰度的編碼慣例一致。
另一個時間節省者:目標型別的新。 代替:
List<int> numbers = new List<int>();List<int> numbers = new List<int>();Dim numbers As New List(Of Integer)()Dim numbers As New List(Of Integer)()您可以編寫:
List<int> numbers = new();List<int> numbers = new();Dim numbers As New List(Of Integer)()Dim numbers As New List(Of Integer)()Tim強調重複類名是沒有必要的——它已經在左側。這遵循良好的編程實踐,通過消除冗余使您的程式碼基礎更容易掃描。
Tim探討了var,這是一個在編碼實踐圈中引發爭論的功能。 有些人不喜歡它因為它會隱藏變數名稱和型別,但Tim澄清其真正的力量在於匿名型別。
當與資料源(如透過Dapper的SQL)一起工作時,Tim展示了如何透過var即時建立物件:
var parameters = new { FirstName = "Tim", LastName = "Corey" };var parameters = new { FirstName = "Tim", LastName = "Corey" };Dim parameters = New With {Key .FirstName = "Tim", Key .LastName = "Corey"}Dim parameters = New With {Key .FirstName = "Tim", Key .LastName = "Corey"}這非常適合編寫查詢或臨時物件——您不需要僅為參數建立一個基類。 正如Tim所說,這避免了用不必要的型別污染您的程式碼基礎,同時如果出現問題仍提供有意義的錯誤訊息。
Tim轉向文件範圍的命名空間,顯示如何這樣做:
namespace ProjectName
{
// indented code
}namespace ProjectName
{
// indented code
}Namespace ProjectName
' indented code
End NamespaceNamespace ProjectName
' indented code
End Namespace成為這樣:
namespace ProjectName;namespace ProjectName;Namespace ProjectName
End NamespaceNamespace ProjectName
End Namespace這一小變化消除了浪費的縮排,並遵循C#命名慣例,如公共成員的Pascal命名法。 Tim解釋說由於大多數文件只包含一個命名空間,這提高了程式碼的可讀性並保持邏輯部分的對齊。
使用記錄可以讓您只用一句話來定義資料物件:
public record EmployeeRecord(int Id, string Name);public record EmployeeRecord(int Id, string Name);Public Class EmployeeRecord
Public Property Id As Integer
Public Property Name As String
Public Sub New(id As Integer, name As String)
Me.Id = id
Me.Name = name
End Sub
End ClassPublic Class EmployeeRecord
Public Property Id As Integer
Public Property Name As String
Public Sub New(id As Integer, name As String)
Me.Id = id
Me.Name = name
End Sub
End ClassTim 指出這生成了一個完整的型別——屬性、不可變性和 ToString()——只需極少的努力。 他清晰地表示衍生類情況仍需要類,但當您的物件是只讀的時,記錄按單一責任原則運作,把一件事做好。
Tim演示了模式匹配如何幫助您安全地處理異常和執行比較。 代替編寫冗長的型別檢查,您可以將它們結合在一起:
if (emp is EmployeeRecord e)
{
e.Id = 1;
}if (emp is EmployeeRecord e)
{
e.Id = 1;
}If TypeOf emp Is EmployeeRecord Then
Dim e As EmployeeRecord = DirectCast(emp, EmployeeRecord)
e.Id = 1
End IfIf TypeOf emp Is EmployeeRecord Then
Dim e As EmployeeRecord = DirectCast(emp, EmployeeRecord)
e.Id = 1
End If這條單行檢查和轉型。 Tim 說這項內容符合良好的編程實踐——避免使用像x或y這樣的單字母變數名,而是給予像e這樣的描述性名稱。 清晰的方法名稱和變數名稱使其他開發者更容易維護程式碼。
為了構建易讀的字串,Tim 演示了字串插值:
$"The employee with ID {e.Id} is {e.Name}"$"The employee with ID {e.Id} is {e.Name}"$"The employee with ID {e.Id} is {e.Name}"$"The employee with ID {e.Id} is {e.Name}"他指出這使有意義的錯誤訊息和編寫評論更容易。 不再是拼接的糾結,您可以像英語一樣寫出可以閱讀的程式碼——提高程式碼質量並簡化檢查輸出的未來單元測試。
Tim展示了nameof()如何在您重構程式碼時保護您。 字串中的硬編碼變數名如果重新命名可能導致意外行為。 但是透過編寫:
nameof(emp)nameof(emp)NameOf(emp)NameOf(emp)編譯器會自動更新每一個用法。 這是保持程式碼基礎健康的最佳實施之一,通過編寫乾淨程式碼並進行重新組織。
與其為了返回兩個值而建立一個基類,Tim使用元組:
(string FirstName, string LastName) SplitName(string fullName)(string FirstName, string LastName) SplitName(string fullName)Function SplitName(fullName As String) As (FirstName As String, LastName As String)Function SplitName(fullName As String) As (FirstName As String, LastName As String)這避免了不必要的外部依賴並遵循單一責任原則——該方法只是拆分一個名稱,沒有更多。 正如Tim所言,當您避免過度設計時,實踐讓程式碼變得更好。
基於元組的基礎,Tim展示了如何將結果解構為局部變數:
var (firstName, lastName) = SplitName("Tim Corey");var (firstName, lastName) = SplitName("Tim Corey");Dim firstName As String
Dim lastName As String
(firstName, lastName) = SplitName("Tim Corey")Dim firstName As String
Dim lastName As String
(firstName, lastName) = SplitName("Tim Corey")這令變數名稱具描述性,並避免了後來神祕的元組語法。 Tim甚至談到了丟棄未使用的值(使用_),這表明了一種意圖——沒有未解釋的單字母變數名留下。
如果您不需要所有的元組部件,Tim建議丟棄:
var (firstName, _) = SplitName("Tim Corey");var (firstName, _) = SplitName("Tim Corey");Dim firstName As String
(firstName, _) = SplitName("Tim Corey")Dim firstName As String
(firstName, _) = SplitName("Tim Corey")這表明其他開發者您正有意地忽略一個值——這對於測試框架或單元測試中並非所有輸出都重要的情況特別有用。
Tim進入資源管理和錯誤處理。 之前,您會編寫:
using (var connection = new SqlConnection(connString))
{
// work
}using (var connection = new SqlConnection(connString))
{
// work
}Using connection As New SqlConnection(connString)
' work
End UsingUsing connection As New SqlConnection(connString)
' work
End Using現在,您可以使用:
using var connection = new SqlConnection(connString);using var connection = new SqlConnection(connString);Using connection As New SqlConnection(connString)Using connection As New SqlConnection(connString)這與SOLID原則一致——尤其是單一責任原則和依賴倒置原則。 Tim指出,這種語法適用於外部依賴如資料庫,確保大部分異常處理更乾淨並且連接總是關閉,避免性能問題或甚至是當連接未被釋放時可能發生的SQL注入情況。
最後,Tim介紹內聯out變數聲明的話題,例如解析:
if (int.TryParse(numberText, out int numberValue))if (int.TryParse(numberText, out int numberValue))If Integer.TryParse(numberText, numberValue) ThenIf Integer.TryParse(numberText, numberValue) Then在此,您在同一行中建立局部變數。 這使編碼慣例更加緊密,方法名稱更具描述性。 透過將程式碼適當分組,您減少意外行為並增加未來重構程式碼工作的安全性。
Tim 在他的影片中結束時提醒觀眾:這些簡化方法並不是要寫出晦澀的一行語句——而是關於良好的編程習慣。 像static使用、記錄、模式匹配、元組以及丟棄這樣的功能讓您可以編寫出乾淨、現代的C#。
他鼓勵開發者在採用這些特性的同時考慮命名慣例、錯誤處理和有意義的名稱。 "程式碼是給人看的,"Tim 說——當您寫出易於理解的程式碼時,您不僅改善了自己的生活,還改善了其他開發者的生活。
簡而言之:擁抱這些C#的最佳實踐,遵循單一責任原則、介面隔離原則和依賴倒置原則等SOLID原則,這樣您的程式碼不僅會編譯——它還將提高性能,減少意外行為,並保持您的團隊對編寫程式碼的熱愛。
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy