using System.Collections.Generic;
public static void Main()
Console.WriteLine("Hello World");
public class Steel:Metal{}
public class MetalPickerContext
public int Condition1{ get;set;}
public class MetalPicker<TMetal, TContext>
where TContext: MetalPickerContext
public virtual IEnumerable<TMetal> GetBest(IEnumerable<TMetal> list, TContext context)
var result = new List<TMetal>();
public class SteelPickerContext: MetalPickerContext
public int Condition2{get;set;}
public class SteelPicker : MetalPicker<Steel,SteelPickerContext>
public override IEnumerable<Steel> GetBest(IEnumerable<Steel> list, SteelPickerContext context)
var initialResult = base.GetBest(list,context);