在 funcs 中封裝轉換
public class MyObject{
public DateTime? TestDate { get; set; }
public Func<MyObject, bool> DateIsValid = myObject => myObject.TestDate.HasValue && myObject.TestDate > DateTime.Now;
public void DoSomething(){
//We can do this:
if(this.TestDate.HasValue && this.TestDate > DateTime.Now){
CallAnotherMethod();
}
//or this:
if(DateIsValid(this)){
CallAnotherMethod();
}
}
}
本著清晰編碼的精神,將上面的檢查和轉換封裝為 Func 可以使你的程式碼更易於閱讀和理解。雖然上面的例子非常簡單,但是如果有多個 DateTime 屬性,每個屬性都有自己不同的驗證規則,我們想檢查不同的組合?每個都具有已建立的返回邏輯的簡單單行 Func 既可讀也可降低程式碼的明顯複雜性。考慮下面的 Func 呼叫,並想象有多少程式碼會使方法變得混亂:
public void CheckForIntegrity(){
if(ShipDateIsValid(this) && TestResultsHaveBeenIssued(this) && !TestResultsFail(this)){
SendPassingTestNotification();
}
}