首先,關鍵流利的接口是你的方法 - Validate
,在這種情況下 - 不要返回布爾值,而是返回一個可以再次調用的對象。所以我們說這是T這裏。另外,你並沒有真正使用擴展方法的語法,你只是定義一個靜態方法。在我們開始之前還有最後一件事情 - 你在你的類定義中設置了泛型參數T,但是這對靜態類來說不是正確的,因爲它們從來沒有用任何特定的泛型參數實例化。你需要將它添加到方法簽名,而不是類簽名:
因此,這裏是你的方法與這兩個變化:
public static class ExtensionMethods
{
public static T Validate<T>(this T myObj, Func<T, bool> expression)
where T : class
{
}
}
現在,你要在那裏做什麼,你只需要調用驗證表達。這是一個委託,所以你可以稱它爲一個函數,並將第一個參數MyObject
作爲參數傳遞給它。如果返回false,我認爲整個語句將拋出一個異常:
public static T Validate(this T myObj, Func<T, bool> expression)
{
if (expression(myObj))
{
return myObj; // Return the object for further processing.
}
else
{
throw new OhNoValidationFailedException("aaaaaaaaahhh!");
}
}
您現在可以使用這樣的:
MyObject myObject = new MyObject();
myObject.Validate(o => o.MyProperty == 7).Do().Something().Else();
第一點,如果確認返回bool的那你怎麼調用方法addMessage就可以了? –