列出Foreach参数化委托

时间:2013-04-10 09:30:11

标签: c# generics

我正在尝试为列表的每个成员调用一个函数,但是将其他参数传递给该委托。

如果我有一个名为documents的列表

List<string> documents = GetAllDocuments();

现在我需要迭代文档并为每个条目调用一个方法。我可以用

这样的东西来做
documents.ForEach(CallAnotherFunction);

这需要CallAnotherFunction具有类似

的定义
public void CallAnotherFunction(string value)
{
    //do something
}

但是,我需要调用CallAnotherFunction中的另一个参数,比如content,这取决于调用列表。

所以,我的理想定义是

public void CallAnotherFunction(string value, string content)
{
    //do something
}

我想将内容作为ForEach调用的一部分传递

List<string> documents = GetAllDocuments();
documents.ForEach(CallAnotherFunction <<pass content>>);

List<string> templates = GetAllTemplates();
templates.ForEach(CallAnotherFunction <<pass another content>>);

有没有办法可以实现这一点而无需定义不同的函数或使用迭代器?

2 个答案:

答案 0 :(得分:9)

使用lambda表达式而不是方法组:

List<string> documents = GetAllDocuments();
documents.ForEach( d => CallAnotherFunction(d, "some content") );

List<string> templates = GetAllTemplates();
templates.ForEach( t => CallAnotherFunction(t, "other content") );

答案 1 :(得分:1)

使用lambda表达式:

string content = "Other parameter value";
documents.ForEach(x => CallAnotherFunction(x, content));