有人能解释一下这个代码片段里发生了什么吗?

本文关键字:片段 代码 发生了 什么 能解释 一下 | 更新日期: 2023-09-27 18:03:07

我正在使用ASP。NET MVC,并通过了一些代码,下面的语法是新的我。有人能告诉我它是怎么工作的吗?

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

有人能解释一下这个代码片段里发生了什么吗?

ViewDataInfo vdi = viewData.GetViewDataInfo(expression);

获取参数为expressionGetViewDataInfo方法的结果。

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

根据lambda函数创建并初始化委托(函数指针)。当你在以后的代码中调用modelAccessor()时,它将返回vdi.Value

() -这意味着函数不检索参数。
Func<object> -函数将返回一个object
vdi.Value -是{ return vdi.Value; }的缩写形式

阅读更多关于lambda函数的信息

这一行将ViewDataInfo设置为vdi变量:

ViewDataInfo vdi = viewData.GetViewDataInfo(expression);

这一行初始化了一个空的Func<object>委托变量:

Func<object> modelAccessor = null;

这一行将Func设置为返回vdi值的lambda表达式:

modelAccessor = () => vdi.Value;

下面的代码代表一个匿名函数,它不接受任何参数,并返回一个object(在Func声明的泛型中指定):

() => vdi.Value