做者:依樂祝
首發地址:https://www.cnblogs.com/yilezhu/p/14174990.htmlhtml
在進行項目的開發的過程當中, if
語句是少不了的,但咱們始終要有一顆消滅 if
/ else
語句的心。爲了消滅if
/ else
咱們引入了 短路器
的概念。 短路器
有時候的確能精簡咱們的代碼,但還不夠,所以我參考了一個方法來繼續消滅一部分 斷路器
中的 if
語句。接下來就讓咱們拿一段事例代碼來一步一步的演示下吧。
以下一段比較典型if 斷路器
代碼:函數
if (someConditionIsMet) { throw new SomeSpecificException("message"); } //someConditionMetCode
這裏代碼雖然沒什麼問題,可是我我的仍是不喜歡用 if
的語句聲明。我更喜歡的是:code
Assert.That(someConditionIsMet, "message");
可是這樣子的話咱們就沒法指定 Exception
的類型了,所以咱們可能須要的是下面這樣子的:htm
Assert.That<MyException>(someConditionIsMet, "message");
可是基類Exception
雖然具備無參數的構造函數,可是在建立異常以後,不容許我再給 Message
進行賦值了。由於,Message是Exception
類中的只讀屬性。blog
public virtual string Message { get; }
個人解決方案是使用Activator.CreateInstance並傳入要實例化的特定異常類型以及異常消息。以下代碼所示:ip
public static class Assert { public static void That<T>(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-assertionci