using System.Collections.Generic;
using System.Collections;
using System.Threading.Tasks;
using System.Diagnostics;
public static void Main()
var program = new Program();
var items = new List<I> { new A(), new A(), new B() };
var groups = items.GroupBy(x => x.GetType());
var dataItemType = g.Key;
var listType = typeof(List<>).MakeGenericType(new [] { dataItemType });
var list = (IList) Activator.CreateInstance(listType);
.MakeGenericMethod(dataItemType)
.Invoke(program, new object[] { list });
public void InsertBulk<T>(IEnumerable<T> ts) {
Console.WriteLine(typeof(T).FullName);
Console.WriteLine(ts.Count());