public class MyObject{ public DateTime? TestDate { get; set; } public Func<MyObject, bool> DateIsValid = myObject => myObject.TestDate.HasValue &&myObject.TestDate> DateTime.Now; public void DoSomething(){ //我们做得到: if(this.TestDate.HasValue &&this.TestDate> DateTime.Now){ CallAnotherMethod(); } //或这个: if(DateIsValid(this)){ CallAnotherMethod(); } } }
本着干净代码的精神,像上面那样将检查和转换封装为Func可以使您的代码更易于阅读和理解。尽管上面的示例非常简单,但是如果存在多个DateTime属性,每个属性都有各自不同的验证规则,又想检查不同的组合怎么办?每个都建立了返回逻辑的简单的单行Funcs既可以读取,又可以减少代码的表观复杂性。考虑下面的Func调用,并想象将有更多代码使该方法混乱:
public void CheckForIntegrity(){ if(ShipDateIsValid(this) && TestResultsHaveBeenIssued(this) && !TestResultsFail(this)){ SendPassingTestNotification(); } }