C#扩展方法中的操作参数

本文关键字:操作 参数 扩展 方法 | 更新日期: 2024-09-24 22:46:12

我正在使用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)
{
    //...?
}

C#扩展方法中的操作参数

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");