[英]C# Action parameters in extension methods
我正在使用DevExpress来构建网格,但我正在尝试构建辅助方法来简化要生成的代码量。 例如,以下简单示例生成一个网格列:
settings.Columns.Add(column =>
{
column.FieldName = "StatusId";
column.Caption = "Status";
column.Width = Unit.Percentage(20);
});
我想使用扩展方法来获得以下内容,这允许开发人员简化基本工作,但仍然可以访问高级设置:
settings.AddColumn("StatusId", "Status", column =>
{
column.Width = Unit.Percentage(20);
});
我可以只返回一个列变量,但这意味着必须为每列创建一个新的变量名,这就是我想维护Action方法的原因。
我的扩展方法看起来会支持这种格式? 它需要创建应用了默认设置的列,并将其添加到columns集合中。 这是我得到的:
public static void AddColumn(this GridViewSettings settings, string fieldName, string caption, Action<MVCxGridViewColumn> column)
{
//...?
}
public static void AddColumn(
this GridViewSettings settings,
string fieldName,
string caption,
Action<MVCxGridViewColumn> action
)
{
settings.Columns.Add(column =>
{
column.FieldName = fieldName;
column.Caption = caption;
action(column);
});
}
你很近。 我会将action参数设置为可选,以便开发人员可以将其保留,除非他们需要它。
public static void AddColumn(this GridViewSettings settings, string fieldName, string caption, Action<MVCxGridViewColumn> additionalConfig = null)
{
var column = new MVCxGridViewColumn
{
FieldName = fieldName,
Caption = caption
};
if (additionalConfig != null)
{
additionalConfig(column);
}
settings.Columns.Add(column);
}
叫它
settings.AddColumn("StatusId", "Status", column =>
{
column.Width = 20;
});
要么
settings.AddColumn("StatusId", "Status");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.