这段代码的解释

时间:2011-06-30 12:50:35

标签: c# c#-4.0 lambda

我刚刚遇到以下代码,我无法理解:

var dataItem = (SportNode)item.DataItem;
item.FindControl<Literal>("Node", image =>
    image.Text = string.Format("<li data-nodeId='{1}' class='{0}'><a href='/sport?navItems={3}'>{2}</a></li>", "top",
    dataItem.NodeId, dataItem.Text, dataItem.NodeId));

特别是,图像来自哪里?它没有在任何地方宣布似乎有类型。我当然无法在任何父类中看到它。

3 个答案:

答案 0 :(得分:4)

“image”是lambda表达式的输入参数。

阅读有关lambdas here的更多信息。

为了更加可读和深入地了解lambdas,Scott Guthrie has a great post introducing them

答案 1 :(得分:2)

Image,这里是匿名函数的参数 - 它从你传递给它的任何东西的签名中派生出它的类型;例如:

    private void PrintResult(Func<Int32, Int32> f)
    {
        Debug.WriteLine(f.Invoke(1));
    }

    //In some other method
    PrintResult(n => n + 2); //prints 3

如果您愿意,可以查看更多相关信息 - 我会搜索“Lambda表达式”或“匿名函数”。

答案 2 :(得分:1)

这是一种匿名方法。 image是此方法的参数名称。 image的类型是从FindControl的第二个参数推断出来的。