2011-03-03 27 views
5

我需要用一些重試策略邏輯來包裝一些Linq查詢。將Linq和.ToList(),.Single()等等作爲func參數傳遞給另一個方法是否安全?

是否安全,通過這樣的:

return WithRetry<User>(() => 
    dataContext.Users.Where(u => u.UserID == userID).SingleOrDefault()); 

這樣:

public TResult WithRetry<TResult>(Func<TResult> methodCall) 
{ 
    // My Try/Catch Retry Code 
} 

還是應該第一線來構建這樣,而不是:

return WithRetry<User>(() => 
{ 
    return dataContext.Users 
         .Where(u => u.UserID == userID) 
         .SingleOrDefault(); 
}); 
+0

不確定數組如何幫助這裏? – mellamokb 2011-03-03 04:44:52

+0

這不是一個數組,最後一個片段會將linq包裝在一個匿名函數中(我相信)。 – Vyrotek 2011-03-03 04:45:40

+0

啊,我明白了。你需要把'return'放在前面。無論哪種方式,它們在我的測試中似乎都具有相同的類型('System.Func \'1 [User]')。 – mellamokb 2011-03-03 04:50:57

回答

2

據我所知,如果參數類型的方法是Func,調用它會自動作爲函數傳遞而不執行它。您不需要進一步將其包裝在匿名函數包裝中。

3

匿名包裝是不需要的。只需直接傳遞lambda表達式函數調用即可。

相關問題