Я хотел бы иметь возможность создавать статический универсальный тип с ограничением базового типа, например
public static class Manager<T> where T : HasId
{
public static T GetSingleById(ref List<T> items, Guid id)
{
// the Id is a property provided by HasId
return (from i in items where i.Id == id select i).SingleOrDefault();
}
}
Затем добавьте еще один метод
...
public static IEnumerable<T> GetManyByParentId(ref List<T> items, Guid parentId) where T : HasIdAndParentId
{
// the parentId is a property of HasIdAndParentId which subclasses HasId
return from i in items where i.ParentId == parentId select i;
}
...
Поскольку HasIdAndParentId подклассов HasId, ограничение T: HasId выполнено, но компилятор не примет ограничение метода базового типа where для метода.
Есть идеи?