Передача списка универсальных типов в метод

У меня есть метод, который динамически создает HTML-таблицу в проекте MVC. Эта таблица может отображать коллекцию одного из четырех типов сущностей. Что мне нужно сделать, это передать типы сущностей в метод, не кодируя метод для каждого типа.

Это мое объявление метода:

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 ответ

Решение

Вы можете добавить интерфейс, который реализуют все ваши четыре класса, затем вы можете передать список этого интерфейса вместо списка типа object, Это спасает вас от многих забросов.

public partial class MyModel : MyInterface
{
    // Properties
}

interface MyInterface {}

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

Нет необходимости в дженериках вообще. Кроме того, дженерики подразумевают, что могут быть переданы ВСЕ виды типов, которые разделяют условие, а не только несколько. Итак, что происходит, когда ваш пользователь метода передал YourModel-класс вместо MyMopdel,

Другие вопросы по тегам