作者:依樂祝
首發地址:https://www.cnblogs.com/yilezhu/p/14174990.html
在進行專案的開發的程序中, if 陳述句是少不了的,但我們始終要有一顆消滅 if / else 陳述句的心,為了消滅if / else 我們引入了 短路器 的概念, 短路器 有時候的確能精簡我們的代碼,但還不夠,因此我參考了一個方法來繼續消滅一部分 斷路器 中的 if 陳述句,接下來就讓我們拿一段事例代碼來一步一步的演示下吧,
如下一段比較典型if 斷路器 代碼:
if (someConditionIsMet)
{
throw new SomeSpecificException("message");
}
//someConditionMetCode
這里代碼雖然沒什么問題,但是我個人還是不喜歡用 if 的陳述句宣告,我更喜歡的是:
Assert.That(someConditionIsMet, "message");
但是這樣子的話我們就無法指定 Exception 的型別了,因此我們可能需要的是下面這樣子的:
Assert.That<MyException>(someConditionIsMet, "message");
但是基類Exception雖然具有無引數的建構式,但是在創建例外之后,不允許我再給 Message 進行賦值了,因為,Message是Exception 類中的只讀屬性,
public virtual string Message { get; }
我的解決方案是使用Activator.CreateInstance并傳入要實體化的特定例外型別以及例外訊息,如下代碼所示:
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-assertion
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/238851.html
標籤:.NET技术
上一篇:Abp Next 和 ant-design-pro-blazor 專案踩坑
下一篇:科研求助
