C# 需要帮助来理解MVCContrib网格中的这段代码吗
我对C#中的“动作”概念有点陌生,一般来说是委托 我试图研究如何在MVC中构建自定义html组件,我选择了MVCContrib的网格组件作为起点 要添加列,通常需要这样做C# 需要帮助来理解MVCContrib网格中的这段代码吗,c#,asp.net-mvc-4,delegates,action,C#,Asp.net Mvc 4,Delegates,Action,我对C#中的“动作”概念有点陌生,一般来说是委托 我试图研究如何在MVC中构建自定义html组件,我选择了MVCContrib的网格组件作为起点 要添加列,通常需要这样做 <%= Html.Grid(Model).Columns(column => { column.For(model => model.Date).Format("{0:d}"); column.For(model =&g
<%= Html.Grid(Model).Columns(column =>
{
column.For(model => model.Date).Format("{0:d}");
column.For(model => model.DayAmount);
column.For(model => model.LeaveType);
})
%>
{
column.For(model=>model.Date).Format(“{0:d}”);
column.For(model=>model.DayAmount);
column.For(model=>model.leveType);
})
%>
我看到了如下列的来源
public IGridWithOptions<T> Columns(Action<ColumnBuilder<T>> columnBuilder)
{
var builder = new ColumnBuilder<T>();
columnBuilder(builder);
foreach (var column in builder)
{
if (column.Position == null)
{
_gridModel.Columns.Add(column);
}
else
{
_gridModel.Columns.Insert(column.Position.Value, column);
}
}
return this;
}
public IGridWithOptions列(Action columnBuilder)
{
var builder=new ColumnBuilder();
专栏作家(编剧);
foreach(生成器中的var列)
{
if(column.Position==null)
{
_gridModel.Columns.Add(column);
}
其他的
{
_gridModel.Columns.Insert(column.Position.Value,column);
}
}
归还这个;
}
我感到困惑的是这个实例中的Action参数,类型是CustomBuilder,那么“CustomBuilder”对象是什么时候被实例化的呢
我想,我可以将上面的调用语句重写为
Html.Grid(Model).Columns(delegate(CustomBuilder<T> column)
{
});
Html.Grid(Model).Columns(委托(CustomBuilder列)
{
});
或者更明确一点
Html.Grid(Model).Columns(new Action<CustomBuilder<T>>(delegate(CustomBuilder<T> column)
{
});
);
Html.Grid(Model).Columns(新操作(委托)(CustomBuilder列)
{
});
);
那么,我们是说,当使用上面的“new”关键字实例化操作时,参数“CustomBuilder”也被实例化了吗
最后,在
“公共IGridWithOptions列(操作列生成器)
”
功能
前两行是
var builder = new ColumnBuilder<T>();
columnBuilder(builder);
var builder=new ColumnBuilder();
专栏作家(编剧);
他们是干什么的?看起来它正在实例化ColumBuilder对象,并将其作为参数传递给操作方法ColumBuilder。这是实例化参数的地方吗
谢谢大家 这与行动概念无关。
代理从一开始就存在于.net中,因此您应该从第一步开始。应在屋顶之前修建墙壁。
但是您应该了解泛型类和方法、扩展方法……在阅读了这篇优秀的文章之后,您就知道了 在谈到Func时,这个概念适用于动作,而动作不会返回任何结果 看起来这里发生了奇迹 var builder=new ColumnBuilder(); 专栏作家(编剧) 我显然不理解委托只是一个指向函数的指针(匿名与否)。调用该参数时,仍然需要提供该参数。(Duh!) 现在一切都好了
多谢各位 谢谢你,彼得。我读了所有的文章,仍然很难在上面的具体例子中把这些点联系起来,这就是我学习的方式。无论如何,谢谢你。