将泛型类型列表传递给方法

时间:2016-01-20 08:39:01

标签: c# asp.net-mvc generic-list

我有一个动态构建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>"

1 个答案:

答案 0 :(得分:2)

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

public partial class MyModel : MyInterface
{
    // Properties
}

interface MyInterface {}

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

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