有人可以解释这段代码中发生了什么吗?

时间:2011-07-23 13:15:01

标签: c# asp.net-mvc

我正在使用ASP.NET MVC并经历了一些代码,下面的语法对我来说是新的。有人可以解释一下它是如何工作的吗?

ViewDataInfo vdi = viewData.GetViewDataInfo(expression);
Func<object> modelAccessor = null;

modelAccessor = () => vdi.Value;

2 个答案:

答案 0 :(得分:4)

ViewDataInfo vdi = viewData.GetViewDataInfo(expression);

获取GetViewDataInfo方法的结果,使用参数expression调用。

Func<object> modelAccessor = null;
modelAccessor = () => vdi.Value;

根据 lambda函数创建和初始化委托(函数指针)。在将来的代码中,您拨打电话modelAccessor(),它将返回vdi.Value

() - 这意味着该函数不会检索任何参数 Func<object> - 该函数将返回object vdi.Value - 是{ return vdi.Value; }

的简短变体

Read more关于lambda函数。

答案 1 :(得分:1)

此行将ViewDataInfo设置为vdi变量:

ViewDataInfo vdi = viewData.GetViewDataInfo(expression);

此行初始化空Func<object> delegate变量:

Func<object> modelAccessor = null;

此行将Func设置为lambda expression,返回vdi的值:

modelAccessor = () => vdi.Value;

下面的代码代表anonymous function,它不接受任何参数并返回object(在Func声明的泛型类型中指定):

() => vdi.Value