在c#中传递匿名方法/函数作为参数
本文关键字:函数 参数 方法 | 更新日期: 2023-09-27 17:53:47
我有一个方法,需要有条件地执行一个方法,像这样:
int MyMethod(Func<int> someFunction)
{
if (_someConditionIsTrue)
{
return someFunction;
}
return 0;
}
我希望能够传递一个Linq查询在MyMethod作为someFunction:
int i = MyMethod(_respository.Where(u => u.Id == 1).Select(u => u.OtherId));
我该怎么做?
int i = MyMethod(() => _respository.Where(u => u.Id == 1).Select(u => u.OtherId));
可以看到,我已经将查询变成了一个lambda。您必须这样做,否则,您的查询将在调用MyMethod
(…)之前执行。并且会引入编译时错误;)),而不是在执行时。
这个return someFunction;
应该是return someFunction();
也许这是一个打字错误,但在MyMethod中你需要实际调用这个函数:
return someFunction();
调用时,直接调用函数。相反,您需要传递一个lambda表达式。此外,你似乎是在一个Func<IEnumerable<int>>
;add Single()
, SingleOrDefault()
, First()
或FirstOrDefault()
:
int i = MyMethod(() => _respository.Where(u => u.Id == 1).Select(u => u.OtherId).SingleOrDefault());