Безопасно ли передавать Linq и .ToList (), .Single () и т. Д. Другому методу в качестве параметра func? - PullRequest
5 голосов
/ 03 марта 2011

Мне нужно было обернуть некоторые запросы Linq некоторой логикой политики повторных попыток.

Безопасно ли передать это:

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

Ответы [ 2 ]

3 голосов
/ 03 марта 2011

Анонимная оболочка не нужна. Просто передайте вызов функции лямбда-выражения напрямую.

2 голосов
/ 03 марта 2011

AFAIK, если тип аргумента метода Func, его вызов автоматически передается как функция без ее выполнения. Вам не нужно дополнительно оборачивать его в оболочку анонимной функции.

...