2011-04-30 88 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()); 
相關問題