代码之家  ›  专栏  ›  技术社区  ›  LeonidasFett

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

  •  -1
  • LeonidasFett  · 技术社区  · 9 年前

    我有一个在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 回复  |  直到 9 年前
        1
  •  2
  •   MakePeaceGreatAgain    9 年前

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

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

    根本不需要仿制药。此外,泛型意味着共享一个条件的所有类型都可以被传递,而不仅仅是少数类型。那么当方法的用户传递 YourModel -类而不是 MyMopdel .