using System.Collections.Generic;
public interface IHaveId {
public class Thing1 : IHaveId {
public class Thing2 : IHaveId {
public static int getMaxId<T>(List<T> list) where T : IHaveId {
return list.Max(i => i.id);
public static void Main()
List<IHaveId> things = new List<IHaveId>();
for (var i=0; i<5; i++) {
things.Add(new Thing1(i));
for (var i=10; i<15; i++) {
things.Add(new Thing2(i));
Console.WriteLine("Max id is " + getMaxId(things));