繁体   English   中英

扩展方法中的C#Action参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM