Как настроить T с базовым контроллером

У меня есть два класса/контроллера, наследующие от BaseController

public class ProductController : BaseController
public class CategoryController : BaseController

Учитывая, что эти контроллеры предназначены для отдельных страниц, мне нужно отформатировать переданный объект (категория или продукт).

В классе List/IEnumerable я попытался добавить тип BaseController, но я не могу понять, как это сделать, поскольку приведенный ниже код либо выдает ошибки о том, что T не существует, либо существующие контроллеры ломаются, если я добавляю T как часть объявления класса T.

Вот BaseController<T> с методом выполнения этого

public class BaseController : SomeController
{
    public List<string> GetDataRefresh(List<T> itemList) // <T> causes an error
    {
        foreach (var item in itemList)
        {

        }
    }
}

Итак, я хотел бы передать что-то вроде списка продуктов или категорий, этот метод работает с переданными данными и возвращает список тех же данных в BaseController, будь то продукт, категория или любой другой тип.

Как я могу объявить T в этом случае?

Изменить 1

Как только вышеизложенное будет работать таким образом, в моем ProductsController я смогу сделать что-то вроде

private List<string> RefreshData()
{
   return GetDataRefresh(_ctx.GetProducts()); // GetProducts is List<Product>
}

В Контроллере категорий это будет

private List<string> RefreshData()
{
   return GetDataRefresh(_ctx.GetCategories()); // GetCategories is List<Category>
}
public List<string> GetDataRefresh<T>(List<T> itemList)? Однако неясно, что вам нужно делать с itemList или вам нужны какие-то ограничения для T.
41686d6564 stands w. Palestine 01.10.2022 11:33

Я просто хочу манипулировать передаваемыми данными, т.е. «if (item.Property ==..... etc '

He-Man 01.10.2022 11:38

Но без ограничений у вас нет доступа к item.Property, потому что вы не знаете тип item во время компиляции. Это может быть даже проблема XY , и лучше отредактировать вопрос и попытаться точно объяснить, чего вы пытаетесь достичь, чтобы мы могли помочь вам с этим. Пожалуйста, убедитесь, что ваш код является минимально воспроизводимым примером.

41686d6564 stands w. Palestine 01.10.2022 11:40

Я поправил идею в уме. Это помогает? Спасибо

He-Man 01.10.2022 11:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, вам нужно это:

public List<string> GetDataRefresh<T>(List<T> itemList)
{
    foreach (var item in itemList)
    {

    }
}

Это сделало свое дело...

He-Man 01.10.2022 13:19

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