将泛型类型的列表传递到方法中

本文关键字:方法 泛型类型 列表 | 更新日期: 2023-09-27 18:31:03

我有一个在MVC项目中动态构造html表的方法。此表可以显示四种实体类型之一的集合。我需要做的是将实体类型传递到方法中,而无需为每个类型编写方法。

这是我的方法声明:

public static HtmlString Table(int rows, int columns, string[] headers, List<MyInterface> model)
{
    //...
}

这是我的观点以及我如何调用我的帮助程序方法:

@model List<MyModel>
<some html>
@OfficeUiHelper.Table(Model.Count, 5, new string[] { "First Name", "Last Name", "Username", "Company", "Role" }, Model)

这是我的界面:

public interface MyInterface
{
}

这是我的实体类型之一:

public partial class MyModel : MyInterface
{
    // Properties
}

总之,当我这样做时,我得到一个错误:

无法从"System.Collections.Generic.List<MyModel>"转换为 "System.Collections.Generic.List<MyInterface>" .

将泛型类型的列表传递到方法中

您可以添加所有四个类都实现的接口,然后您可以传递该接口的列表,而不是类型为 object 的列表。这使您免于许多演员表。

public partial class MyModel : MyInterface
{
    // Properties
}
interface MyInterface {}
public static HtmlString Table(int rows, int columns, string[] headers, List<MyInterface> model)

根本不需要泛型。此外,泛型意味着可以传递共享条件的所有类型的类型,而不仅仅是少数类型。那么,当您的方法的用户传递YourModel类而不是MyMopdel时会发生什么。