using System.Collections.Generic;
public static void Main()
Console.WriteLine("Hello World");
Product p1 = new Product("CD1234", 10);
Product p2 = new Product("T1020", 20);
var products = new List<Product>();
Stock s1 = new Stock("CD1234", 100);
Stock s2 = new Stock("T1020", 200);
var stocks = new List<Stock>();
List<Stock> doubleStocks = DoubleThings<Stock>(stocks);
PrintStocks(doubleStocks);
List<Product> doubleProducts = DoubleThings<Product>(products);
public static List<T> DoubleThings<T>(List<T> stocks) where T : class, new()
var result = new List<T>();
foreach(var s in stocks){
Console.WriteLine(s.GetType());
Console.WriteLine($"I am stock {stock.Sku} {stock.OnHand}");
result.Add((T)(object)stock);
}else if(s is Product product){
Console.WriteLine($"I am product {product.Sku} {product.Price}");
result.Add((T)(object)product);
public static List<Stock> DoubleStocks(List<Stock> stocks)
var result = new List<Stock>();
foreach(var s in stocks){
Console.WriteLine($"I am {s.Sku} {s.OnHand}");
public static void PrintStocks(List<Stock> stocks)
Console.WriteLine($"\nPRINTING STOCKS:");
foreach(var s in stocks){
Console.WriteLine($"I am {s.Sku} {s.OnHand}");
public class Product : ISku
public string Sku { get; set; }
public int Price { get; set; }
public Product(string sku, int price)
public class Stock : ISku
public string Sku { get; set; }
public int OnHand { get; set; }
public Stock(string sku, int onHand)