2011-02-11 123 views
51
private void Include(IList<string> includes, Action action) 
{ 
    if (includes != null) 
    { 
     foreach (var include in includes) 
      action(<add include here>); 
    } 
} 

我想這樣稱呼它是如何在Action中傳遞參數?

this.Include(includes, _context.Cars.Include(<NEED TO PASS each include to here>)); 

的想法是通過每個包括對方法。

+0

是你的`行動`只是一個行動`或是行動`或任何其他變化?你想要多少個參數? – BoltClock 2011-02-11 04:05:21

+1

已更新的問題 – Jop 2011-02-11 04:09:48

+0

看起來您已經通過`includes`參數傳遞了包含。是否想要將`includes`列表中的每個成員傳遞給`action`?如果是這樣,只需傳遞`_context.Cars.Include`(沒有括號)。 – itowlson 2011-02-11 04:13:37

回答

61

如果您知道要傳遞的參數,請輸入Action<T>作爲類型。例如:

void LoopMethod (Action<int> code, int count) { 
    for (int i = 0; i < count; i++) { 
     code(i); 
    } 
} 

如果你想將參數傳遞給你的方法,使該方法一般:

void LoopMethod<T> (Action<T> code, int count, T paramater) { 
    for (int i = 0; i < count; i++) { 
     code(paramater); 
    } 
} 

和呼叫者代碼:

Action<string> s = Console.WriteLine; 
LoopMethod(s, 10, "Hello World"); 

更新。你的代碼應該是這樣的:

private void Include(IList<string> includes, Action<string> action) 
{ 
    if (includes != null) 
    { 
     foreach (var include in includes) 
      action(include); 
    } 
} 

public void test() 
{ 
    Action<string> dg = (s) => { 
     _context.Cars.Include(s); 
    }; 
    this.Include(includes, dg); 
} 
5

使壞:你還可使用lambda表達式來傳遞你想要的任何代碼,包括帶參數調用。

this.Include(includes,() => 
{ 
    _context.Cars.Include(<parameters>); 
});