2011-03-23 37 views
0

下面的代碼僅僅是一個示例。字符串的謂詞是 我想知道如果下面的代碼可能不會更簡單地寫:方法簽名中的謂詞,Lambda表達式

public static bool IsValid(Predicate<string> condition, string test) 
    { 
     return condition(test); 
    } 

和呼叫:

Validator.IsValid(s => s.StartsWith("Test"), "Test with a lambda expression") 

編輯

對不起,缺乏細節。上面的代碼只是一個例子,但IsValid的方法將採取謂詞參數,而不是一個謂語所以這裏的招牌:

public static bool IsValid(Predicate<T> condition, T obj) 
    { 
     return condition(obj); 
    } 
+1

我很困惑。你問是否有更簡單的方法來編寫'return condition(test);'? – Gabe 2011-03-23 13:27:52

回答

1

我個人認爲這是清潔劑把lambda作爲最後一個參數,只要有可能,因爲它使代碼更易於閱讀:

public static bool IsValid(T obj, Predicate<T> condition) 
{ 
     return condition(obj); 
} 

Validator.IsValue(foo,f=>f.Value==1); 
+0

好的,謝謝你的提示;-) – Florian 2011-03-23 15:11:18

+0

它和以前的版本一樣沒用......爲什麼你需要一個方法來執行你提供給它的謂詞?你也可以自己執行謂詞 – 2011-03-24 16:36:12

1

是的,它可以更簡單地寫:

"Test with a lambda expression".StartsWith("Test") 

IsValid方法在這裏絕對不會添加任何值......如果您知道將要傳遞給IsValid的謂詞,爲什麼不直接對其進行評估而不是調用「幫助器」方法?

+0

這只是爲了舉例,但IsValid方法將採用謂詞參數,而不是謂詞。 – Florian 2011-03-23 14:17:15

+0

有什麼區別?我說的仍然代表Predicate ... – 2011-03-23 15:03:12