2011-04-30 86 views
2

我有一个需要有条件地执行的方法的方法,像这样:在匿名方法/函数传递在C#中的参数

int MyMethod(Func<int> someFunction) 
{ 
    if (_someConditionIsTrue) 
    { 
     return someFunction; 
    } 

    return 0; 
} 

我希望能够在通过LINQ查询MyMethod as someFunction:

int i = MyMethod(_respository.Where(u => u.Id == 1).Select(u => u.OtherId)); 

我该怎么做?

回答

6
int i = MyMethod(() => _respository.Where(u => u.Id == 1).Select(u => u.OtherId)); 

正如你所看到的,我已经把查询变成了lambda。你将不得不这样做,因为否则,你的查询将在调用MyMethod(...并且会引入编译时错误)之前执行,而不是在它执行时执行。

一个侧面说明:

return someFunction;应该是return someFunction();

+0

卫生署!我几乎这样做了,但是我有'()= _repository'而不是'()=> _respository'。这工作完美,谢谢! – 2011-04-30 14:49:31

+0

@Jerad Rose我很高兴我能帮忙:) – 2011-04-30 15:15:47

2

也许这是一个错字,但在你的MyMethod需要实际调用该函数:

 return someFunction(); 

并调用它时,你就直接调用该函数。相反,你需要传递一个lambda表达式。此外,你似乎正在通过一个Func<IEnumerable<int>>;添加Single()SingleOrDefault()First()FirstOrDefault()

int i = MyMethod(() => _respository.Where(u => u.Id == 1).Select(u => u.OtherId).SingleOrDefault()); 
相关问题