在 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();
}
}