1. 程式人生 > >一個小技巧助您減少if語句的狀態判斷

一個小技巧助您減少if語句的狀態判斷

> 作者:依樂祝 > 首發地址:https://www.cnblogs.com/yilezhu/p/14174990.html 在進行專案的開發的過程中, `if` 語句是少不了的,但我們始終要有一顆消滅 `if` / `else` 語句的心。為了消滅`if` / `else` 我們引入了 `短路器` 的概念。 `短路器` 有時候的確能精簡我們的程式碼,但還不夠,因此我參考了一個方法來繼續消滅一部分 `斷路器` 中的 `if` 語句。接下來就讓我們拿一段事例程式碼來一步一步的演示下吧。 如下一段比較典型if `斷路器` 程式碼: ```csharp if (someConditionIsMet) {   throw new SomeSpecificException("message"); } //someConditionMetCode ``` 這裡程式碼雖然沒什麼問題,但是我個人還是不喜歡用 `if` 的語句宣告。我更喜歡的是: ```csharp Assert.That(someConditionIsMet, "message"); ``` 但是這樣子的話我們就無法指定 `Exception` 的型別了,因此我們可能需要的是下面這樣子的: ```csharp Assert.That(someConditionIsMet, "message"); ``` 但是基類`Exception`雖然具有無引數的建構函式,但是在建立異常之後,不允許我再給 `Message` 進行賦值了。因為,Message是`Exception `類中的只讀屬性。 ```csharp public virtual string Message { get; } ``` 我的解決方案是使用Activator.CreateInstance並傳入要例項化的特定異常型別以及異常訊息。如下程式碼所示: ```csharp public static class Assert { public static void That(bool condition, string msg) where T : Exception, new() { if (condition) { var ex = Activator.CreateInstance(typeof(T), new object[] { msg }) as T; throw ex; } } } ``` 至此,結束。開頭的那段程式碼就可以通過變通的方式把 `if` 語句給移除了,顯得程式碼更精簡,你覺得呢?當然,如果你有更好的處理方式也可以留言告訴我。 參考自:[https://www.codeproject.com/Tips/5289739/Assert-with-assertion](https://www.codeproject.com/Tips/5289739/Assert-with-as