編寫乾淨的C#代碼技巧

2021-01-11 51CTO

介紹

在當今時代,編寫代碼並不困難。然而,編寫乾淨且可伸縮的代碼並不容易。在本文中,我們將討論一些為我們的項目編寫乾淨C#代碼的技巧。乍一看,任何以前從未見過您的代碼的開發人員都必須儘可能地理解它,它幫助我們更好地理解代碼。

下面是編寫乾淨C#代碼的一些重要技巧。

使用好的IDE

首先,為您的技術堆棧選擇最好的IDE。在我們的例子中,Visual Studio是C#最流行、最好的IDE之一。它是微軟可靠的、完全的產品。一些開發人員也喜歡Rider IDE(付費)。使用這些IDE可以確保代碼保持整潔。Visual Studio有相當穩定的智能感知特性,可以糾正和建議代碼中的更改。

使用有意義的名字

命名變量可能是整個軟體開發生命周期中最困難的部分。為變量和方法想一個有意義的名稱是非常耗時的。但是跳過這個過程並隨機命名也不是一個好主意,不是嗎?

不建議寫法

int d; 

這是命名變量最簡單的方法,對吧?但是不要這樣做。一個好的名稱可以幫助其他開發人員理解變量/方法的上下文和用法。下面是您想要命名變量的方式。

建議寫法

int daysToAppocalypse; 

使用駱駝/帕斯卡大小寫符號

除了為變量選擇一個合適的名稱外,還要維護您編寫名稱的方式。理想情況下,我們使用駱駝大小寫和Pascal大小寫表示法作為最佳代碼實踐。不要在變量中使用隨機大寫字母。那看起來就是不漂亮!

駝峰式大小寫符號

基本上,變量的第一個單詞的第一個字母將是小寫的,後面每一個單詞的第一個字母應該是大寫的。在命名局部變量和方法參數時,必須使用這種符號。

不建議寫法

int RandomInteger;   string FirstName; 

建議寫法

int randomInteger;   string firstName;  

帕斯卡案例符號

這裡,您所有單詞的首字母應該是大寫,我們使用這種符號來命名方法和類。

不建議寫法

class program   {       static void main(string[] args)       {           Console.WriteLine("Hello World!");       }   }  

建議寫法

class Program   {       static void Main(string[] args)       {           Console.WriteLine("Hello World!");       }   }   

注意格式

對代碼進行格式化可以提高代碼的可讀性。制表符優於空格,記得嗎?

class Program   {static void Main(string[] args)       {Console.WriteLine("Hello World!");       }   }  

這個看起來怎麼樣?很討厭,是嗎?現在,Visual Studio有一個內置特性,可以完美地格式化代碼。要做到這一點,只需到相關的類中按CTRL + K和CTRL + d,看到了嗎?很酷,是嗎?

在需要的時候添加注釋

這是我們所有開發人員都討厭的事情,不是嗎?然而,從長遠來看,添加幾行評論/描述的方法確實能幫助你和其他開發人員。Visual Studio使它變得更加容易,只要在相關的方法上面輸入///,VS就會自動為您生成一個包含方法參數的注釋模板。

為什麼這麼酷?無論何時(從任何地方)調用這個方法,Visual Studio都會顯示您的注釋。相信我,這很有幫助。

P.S. 只有在情況需要的時候才添加評論。例如,當某個特定方法過於複雜,需要深入解釋時。在這種情況下,您需要添加注釋。記住,維護注釋也將成為一項任務,因此要有節制地使用注釋。

重用代碼

編寫可重用的代碼是非常重要的。它可以減少項目中的總代碼行數,並提高效率。您不希望通過多個類複製粘貼一個函數。相反,您可以做的是創建一個共享庫項目,並在每個必需的項目中引用它。通過這種方式,我們構建了可重用的函數。而且,如果需要進行任何修改,您只需要更改共享庫中的代碼,而不是在任何地方更改。

保持類儘可能小

根據Solid原則,您必須將類隔離為只有一個職責函數的小塊。這有助於我們實現鬆散耦合的代碼。確保您在查看類時不需要反覆滾動。這可以是一個一般的經驗法則。

使用設計模式

這可能是架構師級別的開發人員需要做的事情。確定將哪種設計模式應用於哪種場景需要大量的經驗。設計模式基本上是能夠在架構解決方案時提供可重用解決方案的模式。

把您的解決方案組織好

你構建結構化的解決方案嗎?建立一個這樣的系統是非常令人滿意和重要的。下面是我遵循洋蔥架構的一個解決方案。

在單個項目中仍然可以完成所有工作。但是,為了支持可伸縮性和鬆散耦合的解決方案,我們將它們分成不同的層,如應用程式、領域、基礎設施等。

這裡還有一些其他的優勢:

可重用性——如果您想將同一個項目用於另一個解決方案,您可以這樣做。 改進的安全性 高度可維護的 可伸縮的 控制反轉等

避免魔法字符串/數字

什麼是魔法字符串?它們是直接在應用程式代碼中指定的字符串,對應用程式的行為有直接影響。換句話說,不要在應用程式中使用硬編碼的字符串或值。當應用程式增長時,跟蹤這些字符串是很困難的。此外,這些字符串可以與某種外部引用相關聯,如文件名、文件路徑、URL等。在這種情況下,當資源的位置發生變化時,必須更新所有這些神奇的字符串,否則應用程式將中斷。考慮下面的例子:

if(userRole == "Admin")   {       //logic here   } 

你可以這樣寫:

const string ADMIN_ROLE = "Admin"   if(userRole == ADMIN_ROLE )   {       //logic here   } 

或者,您也可以為用戶角色創建枚舉並簡單地使用它。這是一種更簡潔的編寫代碼的方式。

刪除未使用的代碼

通常會有注釋掉未使用代碼的做法,這最終會增加應用程式編譯時的代碼行數。你不應該這樣做。您可以使用像Git這樣的源控制項來確保您可以在任何時候恢復。寧願使用Git而不是注釋掉代碼。

使用方法連結

這是Microsoft在默認生成代碼中廣泛使用的一種常見技術。在這裡,每個方法返回一個對象,這些函數將被連結在一起。認識嗎?這是方法連結的一個很好的例子。

services.AddHealthChecks().AddSqlServer(_configuration.GetConnectionString("DefaultConnection"));  

下面是一個詳細的例子。我們有一個student類和另一個創建並返回數據填充student對象的隨機方法。

public class Student   {       public string Name { get; set; }       public int Age { get; set; }   }   public Student SomeMethod()   {       Student testStudent = new Student();       testStudent.Name = "Jay Krishna Reddy";       testStudent.Age = 25;       return testStudent;   }  

對我們開發人員來說,設置Student對象的值可能不是問題。但是,讓我們假設一個單元測試開發人員必須在您的類上進行測試,並且實際上沒有C#,或者您想通過簡化整個過程來取悅您的客戶。這就是連貫接口的用武之地。創建一個新的連貫類,如下所示:

public class StudentFluent   {       private Student student = new Student();       public StudentFluent AddName(string name)       {           student.Name = name;           return this;       }       public StudentFluent AddAge(int age)       {           student.Age = age;           return this;       }   }   public StudentFluent SomeMethod()   {       return new StudentFluent().AddName("Jay Krishna Reddy").AddAge(25);   }  

這很有意義,並且在一個全新的層次上提高了可讀性,對嗎?方法連結的另一個簡單例子如下:

public string AnotherMethod()   {       string name = "Jay Krishna";       return name.Replace("J", "A").Replace("A", "J").Replace(".", string.Empty);   }   

使用異步/等待

異步編程是最好的選擇!異步編程在處理需要一些時間才能完成計算的函數時,有助於提高總體效率。在這樣的函數執行期間,對於最終用戶來說,整個應用程式似乎是凍結的。這導致了糟糕的用戶體驗。在這種情況下,我們使用異步方法來釋放主線程。

不要在catch塊使用Throw ex

您確實不希望只是在捕獲異常並丟失堆棧跟蹤數據後對其進行「throw ex」。 只需使用「throw」即可。 通過使用此方法,您還可以存儲堆棧跟蹤,這對於診斷很重要。

不建議寫法

try   {       // Do something..   }   catch (Exception ex)   {       throw ex;   }   

建議寫法

try   {       // Do something..   }   catch (Exception ex)   {       throw;   }  

使用三元運算符

考慮下面的例子,我相信你們很多人仍然在遵循這一做法。

public string SomeMethod(int value)   {       if(value == 10)       {           return "Value is 10";       }       else       {           return "Value is not 10";       }   } 

但如果有更好更清潔的方法呢?引入三元操作符。

現在我們之前寫的多行代碼可以使用三元運算符縮減為一行,您可以開始想像這將節省多少行代碼!

public string SomeMethod(int value)   {       return value == 10 ? "Value is 10" : "Value is not 10";   }  

使用Null合併操作符

類似地,我們還有另一個操作符,可以在進行null檢查時派上用場。??這個操作符在C#中稱為Null合併操作符。

考慮另一個例子,下面是一個接受Student對象作為參數並檢查空對象的小函數。如果為空,返回一個帶有數據的新對象,否則返回相同的對象。

public Student SomeMethod(Student student)   {       if (student != null)       {           return student;       }       else       {           return new Student() { Name = "Jay Krishna Reddy" };       }   }   

讓我們添加操作符並縮小這個函數!

public Student SomeMethod(Student student)   {       return student ?? new Student() { Name = "Jay Krishna Reddy" };   }  

首選字符串插值

每次您要向字符串添加動態值時,我們都傾向於使用複合格式或僅使用加號將其添加。

public string SomeMethod(Student student)   {       return "Student Name is " + student.Name + ". Age is " + student.Age;   }  

從C# 6開始,引入了String Interpolation功能。 這提供了一種更具可讀性和涼爽性的語法來創建格式化的字符串。 這是使用內插字符串的方法。

public string SomeMethod(Student student)   {       return $"Student Name is {student.Name}. Age is {student.Age}";   }   

使用表達體法

這樣的方法用於方法體甚至比方法定義本身小得多的場景中。為什麼要浪費括號和代碼行呢?下面是編寫表達式體方法的方法。

public string Message() => "Hello World!";  

避免太多參數

太多的參數總是一場噩夢。如果你傾向於有超過3個參數輸入到任何方法,為什麼不把它包裝到一個請求對象或其他東西,然後傳遞?讓我們看一個小例子。

public Student SomeMethod(string name, string city, int age, string section, DateTime dateOfBirth)   {       return new Student()       {           Age = age,           Name = name,           //Other parameters too       };   }   

你可能希望它是這樣的。

public Student SomeMethod(Student student)   {       return student;   }    

不要忽略捕捉到的錯誤

這是我一直在做的事情。你們很多人很有可能也會這樣做。我們添加了一個try-catch塊並忽略了錯誤處理,對嗎?處理此類錯誤並將其記錄到表或磁碟是一種很好的實踐。

public void SomeMethod()   {       try       {           DoSomething();       }       catch       {          }   }   public void SomeMethod()   {       try       {           DoSomething();       }       catch (Exception ex)       {           LogItSomewhere(ex);       }   }   

【編輯推薦】

【責任編輯:

未麗燕

TEL:(010)68476606】

點讚 0

相關焦點

  • 程式設計師如何寫出優質乾淨的代碼?這6個技巧了解一下
    作為一名開發者,編寫一手優質而乾淨的代碼很重要!但是,要想寫出乾淨的代碼並不是一件容易的事,需要嘗試不同的技巧和實踐。乾淨代碼的好處首先,乾淨的代碼,可以減少開發者閱讀和理解代碼的時間其次,由於代碼乾淨、整潔,無論是很長一段時間後回頭來看,還是別人接手這個項目,都可以快速的理解代碼,能夠更容易開始和繼續這個項目。
  • 編寫更簡潔的Python代碼的5個技巧
    當您按照其官方網站上的下載和安裝說明進行操作時,很快就可以編寫&34;程序。當您了解更多關於Python的知識時,您可能會著迷於它使用不同方法實現相同功能的靈活性。 但是,遲早您會發現某些解決方案比其他解決方案更簡潔。 更重要的是,從長遠來看,更簡潔的代碼往往更易於閱讀和維護。當然,有很多方法可以用Python編寫簡潔的代碼。
  • 5個最優秀的Java和C#代碼轉換工具
    【IT168 技術】毋庸置疑,Java 是一門最受歡迎而且使用最廣泛的程式語言,目前有超過 9 百萬的 Java 開發者從事 web 服務的開發,Java 以「編寫一次,可在任何地方運行」而著稱,同時這也是其大受歡迎的主要原因。
  • C#演練:一步一步教你如何編寫面向對象代碼
    之前寫過一篇文章:今天再次演練,讓大家儘可能熟悉並熟練面向對象代碼的編寫思路和方法。今天以漢服的「形制」為例子,演練怎麼編寫漢服的面向對象代碼。本文出現的中文編碼是為了讓您看起來方便,您實際業務編寫時不宜使用中文。
  • 編寫更嵌入式軟體代碼的10個技巧
    以下技巧絕不會構成一個完整列表,但是它們解決了一些常見問題,這些問題可能會使您的應用程式維護者有理由詛咒您的名字,並且不要忘記您可能是其中之一!提示1:避免使用彙編代碼當然,在低端PIC上您別無選擇,而在高端ARM上您可能不需要它,但是在這兩種極端之間,有很多平臺使用彙編代碼來實現以下目的:提高性能並減少代碼大小。
  • 關於如何編寫 Clean Code 的 6 個簡單技巧
    編寫簡潔代碼(Clean Code)不是一件非常容易的事情,為了保持代碼整潔,你需要嘗試不同的技巧和做法。問題是,在這個問題上,有太多的做法和技巧,是需要大量的重構的。因此,開發者很難選擇出適合自己項目的做法和技巧。
  • 編寫安全有效的 C# 代碼
    要使用這些功能,必須將項目配置為使用 C 7.2 中新增的語言功能提供了可使用對值類型的引用來實現安全高效代碼的機制。 請恰當地使用這些功能,以最大程度地減少分配和複製操作。 本文將介紹這些新功能。本文重點介紹以下資源管理技術:聲明一個 readonly struct 以表示類型是不可變的 。 這使編譯器可以在使用 in 參數時保存防禦性副本。
  • 7招教你編寫更簡短有效的java代碼
    是的,您可以按照以下七個技巧來編寫簡短的Java代碼。其中一些可能會讓您感到驚訝,但請相信我,它們是行之有效的做法-至少在我看來。1.使用IntelliJ IDEA作為您的IDE我已經使用Eclipse六年了,使用NetBeans三年了。
  • 如何編寫簡潔美觀的Python代碼
    介紹你有沒有遇到過一段寫得很糟糕的Python代碼?我知道你們很多人都會點頭的。編寫代碼是數據科學家或分析師角色的一部分。另一方面,編寫漂亮整潔的Python代碼完全是另一回事。作為一個精通分析或數據科學領域(甚至軟體開發)的程式設計師,這很可能會改變你的形象。
  • C#核心開發-如何編寫出命名規範、開發者都能看得懂的代碼?
    標識符在C#中,我們編寫的代碼中,大部分都存在標識符,如var,Console,Write、Read等。C#標識符有2種,1種是自定義的標識符,另1種是C#中已存在的,這類標識符又稱為保留字。1.1. 保留字保留字是指C#中已經內置的,是C#語言對於編譯器有特殊意義的預定義標識符,不能將保留字作為自定義的標識符使用。
  • 《代碼整潔之道》精讀與演繹】之一 讓代碼比你來時更乾淨
    八、編寫代碼的難度,取決於周邊代碼的閱讀難度  編寫代碼的難度,取決於周邊代碼的閱讀難度。何出此言?因為各種實踐與統計表明,在項目裡開發新功能的過程中,閱讀之前代碼與書寫新的代碼,花費的時間比例超過10:1,新寫代碼時,我們一直在讀舊代碼。既然比例如此之高,我們就應該讓讀的過程變得輕鬆,即便那會使得編寫過程更難。
  • 如何編寫出擁抱變化的代碼?
    在實際的開發中,編寫出易維護和易接受變化的代碼並非易事,想要實現可能更加困難重重:源碼難於理解、依賴關係指向不明、耦合也很令人頭疼。難道就真的就沒有辦法了嗎?本文中我們一起探討幾個技術原則和一些編碼理念,讓你的代碼跟著需求走,而且易維護易拓展。
  • 人類和編譯器誰編寫的代碼更快?你們的答案也許都是錯的
    他們有成千上萬的技巧讓蹩腳的代碼運行得非常快,比大多數人手寫的速度還要快。這使得一些人聲稱程序優化是可以留給編譯器,因為他們似乎在這方面做得更好。這通常會引起另一個極端的人的反對,他們說可以手工編寫比任何編譯器都快的代碼,這使得編譯器在性能方面沒用武之地。在某種程度上,這兩種觀點都是正確的。從另一方面來說,他們都錯了。
  • 如何編寫漂亮的 React 代碼?
    當然,如果出於某種原因,React 對我來說是不愉快的,而我想要花時間編寫代碼來獲得樂趣,那麼最明顯的做法就是不要使用 React。而我大多數時間就是不用 React 的。但是,眾所周知,編碼是多方面的:你有代碼、工件、你向計算機輸入的符號行,但你也有代碼結果,它的輸出,你用程式語言表達的想法的現實意義。可以從我的代碼與現實世界的交互中獲得同等甚至更大的樂趣,我對此比較在乎。
  • 這三個技巧,讓你的代碼可讀性提高300%
    這三個技巧最好的地方在於: 可以立即實現。不需要訓練時間。僅僅需要幾分鐘就能蛻變成更優秀的程式設計師!使用描述性的變量和函數名程序代碼往往包含上千單詞。當然,也有篇幅較短的代碼。使用自解釋變量和函數名使代碼更容易閱讀、理解、維護和後續擴展。舉個例子:在編寫這段代碼時,開發人員確切地知道要實現的是哪種功能。但是,其他人能理解嗎?
  • 編寫高質量Python代碼的90個有效方法(第二版)
    有效Python的第二版將幫助您掌握真正的「Python」編程方法,利用Python的全部功能編寫異常健壯和性能良好的代碼。使用簡潔、腳本驅動的Scott Meyers最暢銷的C++風格,Brett Slatkin匯集了90個Python最佳實踐、技巧和快捷方式,並用真實的代碼示例來解釋它們,這樣您就可以放心地接受Python。
  • 經驗之談:代碼該怎樣寫才能幹淨整潔
    你的代碼應該像一篇美文一樣,給讀者帶來很好的閱讀體驗。將你代碼的類/文件視為文章的標題,將你的方法(函數)視為文章的段落。你代碼中的語句就相當於文章中的句子。下面本文將列出一些乾淨代碼的特徵:乾淨的代碼是專一的——每個函數、每個類、每個模塊都應該只做一件事,並且將其做好。乾淨代碼應該是優雅的——乾淨的代碼應該易於閱讀。閱讀乾淨的代碼會讓你感到愉悅。
  • C語言陷阱與技巧第15節,為什麼每調用一次函數,就需要一次if判斷...
    但是,可能因為某種原因,something 文件沒有生成,那麼上面這段C語言代碼編譯得到的程序就什麼也不會輸出了。遇到這種什麼都沒有輸出的情況,初學者甚至可能會以為程序沒有運行。# gcc t.c# ./a.out #要是這段C語言代碼隱藏在一個比較大的項目間,something 文件是由其他邏輯生成的,這時要定位問題代碼可能就要花些功夫了。
  • Python編寫代碼的規範要求
    打開APP Python編寫代碼的規範要求 碼農阿勇 發表於 2020-01-16 17:44:00 遵循好的規範可以不僅提高我們代碼的可讀性,還可以提高程序開發效率。新手和高手之間的差別主要也體現在規範上,這裡勇哥主要給大家分享python的PEP8規範,希望大家在編寫代碼的時候按照規範要求去編寫。
  • pycharm的基本操作,創建項目,新建py文件,編寫代碼及保存
    基本內容如題目:1、Pycharm的設置2、創建項目3、新建py文件4、編寫代碼及保存Pycharm的設置首先雙擊打開pycharm每次打開pycharm,用戶界面UI會跳出一些提示(Tip of the day,今日提示/今日小技巧)這些技巧提示會對使用pycharm很有幫助。左下角的√,代表每次開啟pycharm都跳出提示,筆者建議不要把√取消。英文不好的話,最簡單的做法就是複製,然後放進瀏覽器搜索,選擇百度翻譯,這樣就可以知道它說的是什麼了。