Return a List or a ObservableCollection

It's crazy generic method time! Here is a method I created for fun that either returns a List<T> or a ObservableCollection<T>, depending on what you pass in via generic parameters. It creates a list of Product entity instances with some fake data.

The L stands for the type of ICollection you want to create and return. For example a List<T> or a ObservableColleciton<T>. The P stands for a Product class type. This could be replaced with any type of entity, just replace the condition of where : Product with the entity type of your choice.

You can call it using this code:

List<Product>  productList = CreateProductList<List<Product>, Product>();
 
or
 

ObservableCollection<Product> productOC =

CreateProductList<ObservableCollection<Product>, Product>();

 

Its just for fun ... so enjoy.

   1:  private L CreateProductList<L, P>()
   2:      where P : Product, new()
   3:      where L : ICollection<P>, new()
   4:  {
   5:      L products = new L
   6:  {
   7:      new P
   8:          {
   9:              ProductId = 70,
  10:              ProductName = "Outback Lager",
  11:              QuantityPerUnit = "24 - 355 ml bottles",
  12:              UnitsInStock = 15,
  13:              UnitPrice = 15,
  14:              UnitsOnOrder = 10,
  15:              ReorderLevel = 30,
  16:              Discontinued = false
  17:          },
  18:      new P
  19:          {
  20:              ProductId = 71,
  21:              ProductName = "Flotemysost",
  22:              QuantityPerUnit = "10 - 500 g pkgs.",
  23:              UnitsInStock = 25,
  24:              UnitPrice = (decimal)21.5,
  25:              UnitsOnOrder = 0,
  26:              ReorderLevel = 0,
  27:              Discontinued = false
  28:          },
  29:      new P
  30:          {
  31:              ProductId = 35,
  32:              ProductName = "Steeleye Stout",
  33:              QuantityPerUnit = "24 - 12 oz bottles",
  34:              UnitsInStock = 20,
  35:              UnitPrice = (decimal)18,
  36:              UnitsOnOrder = 0,
  37:              ReorderLevel = 15,
  38:              Discontinued = false
  39:          },
  40:      new P
  41:          {
  42:              ProductId = 53,
  43:              ProductName = "Perth Pasties",
  44:              QuantityPerUnit = "48 pieces",
  45:              UnitsInStock = 0,
  46:              UnitPrice = (decimal)32.80,
  47:              UnitsOnOrder = 0,
  48:              ReorderLevel = 0,
  49:              Discontinued = true,
  50:              DiscontinuedDate = new DateTime(1996, 7, 4)
  51:          }
  52:  };
  53:      return products;
  54:  }
Tweet Post Share Update RSS

Hi, I'm John Papa. I author this blog, create courses for Pluralsight and am a Google Developer Expert and Microsoft Regional Director. I travel speaking at events and train technology thought leaders

Tags:
All