using System.Collections.Generic;
public static void Main()
Dictionary<Type, List<A>> dict = new();
dict.Add(foo.GetType(), new List<A>());
dict.Add(bar.GetType(), new List<A>());
dict[foo.GetType()].Add(foo);
dict[bar.GetType()].Add(bar);
foreach (var a in dict[foo.GetType()])
Console.WriteLine(a.ToString());
public override string ToString(){return "a";}
public override string ToString(){return "b";}