gpt4 book ai didi

c# - 具有可选泛型参数的泛型方法

转载 作者:行者123 更新时间:2023-11-30 20:01:48 27 4
gpt4 key购买 nike

如何创建具有可选泛型类型的泛型方法?这就是我现在拥有的,有效

 public GridViewColumn<T> Column<D>(String HeaderText, D decorator) where D: IColumnDecorator, new()
{
GridViewColumn<T> column = new GridViewColumn<T>();
column.HeaderText = HeaderText;
column.Decorator = new D();
return column;
}

如您所见,我需要在 Column() 方法中实例化类型 D(实现 IColumnDecorator)。

问题是,类型“D”是可选的。如果为 Null,我想明确使用我拥有的默认 ColumnDecorator。类似

 public GridViewColumn<T> Column<D>(String HeaderText, D decorator) where D: IColumnDecorator, new()
{
GridViewColumn<T> column = new GridViewColumn<T>();
column.HeaderText = HeaderText;
if(decorator ==null)
{
column.Decorator = new DefaultColumnDecorator();
}
else{
column.Decorator = new D();
}
return column;
}

请帮忙。谢谢!

[编辑]。

如果我有一个自定义的 IColumnDecorator 实现,这就是我想在 Razor MVC 中使用它的方式

@Model.[IEnumerable].Grid(grid=>{
..
...
grid.columns(
grid.Column<MyOwnColumnDecorator>("FirstColumn")
)
});

如果我没有并且想使用默认值,那么我希望能够做类似的事情

@Model.[IEnumerable].Grid(grid=>{
..
...
grid.columns(
grid.Column("FirstColumn",null) or simply grid.Column("FirstColumn");
)
});

最佳答案

在您当前的代码中,您不需要 decorator 参数,因为您创建了一个新的 D 实例并使用它。

public GridViewColumn<T> Column<D>(String HeaderText) where D: IColumnDecorator, new()
{
GridViewColumn<T> column = new GridViewColumn<T>();
column.HeaderText = HeaderText;
column.Decorator = new D();
return column;
}

如果你有一个默认的参数类型可以使用,你不需要使用泛型:

public GridViewColumn<DefaultColumnDecorator> Column(String headerText)
{
return Column<DefaultColumnDecorator>(headerText);
}

或者,您可以保留参数并删除 new() 约束:

public GridViewColumn<T> Column<D>(String HeaderText, D decorator) where D : IColumnDecorator
{
GridViewColumn<T> column = new GridViewColumn<T>();
column.HeaderText = HeaderText;
column.Decorator = decorator;
return column;
}

public GridViewColumn<DefaultColumnDecorator> Column(String headerText)
{
return Column(headerText, new DefaultColumnDecorator());
}

关于c# - 具有可选泛型参数的泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18025322/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com