Search code examples
c#asp.net-mvcgenericsgeneric-list

How to set up T with Base Controller


I have two classes/controllers inheriting from a BaseController

public class ProductController : BaseController
public class CategoryController : BaseController

Considering these controllers are for individual pages, i need to format a List/IEnumerable of the object (Category or Product), passed in.

In the BaseController class i tried to add a T type but i cant understand how this should be done as the below code either throws errors that T does not exist or the existing Controllers break, if i add T as part of the class declaration BaseController<T>.

Heres the BaseController with the method to carry out this

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

        }
    }
}

So i would like to pass in something like a list of products or categories, this method does the work with the data passed in and returns a list of the same data in a List<string> whether that be product, category or any other type.

How could i declare a T in this instance?

Edit 1

Once the above is working in this manner then in my ProductsController i should be able to do something like

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

In the Category Controller it would be

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

Solution

  • It seems you need this:

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