Вы не можете использовать TThing
в качестве параметра типа в общем ограничении, если оно также не определено также в сигнатуре метода - поэтому Room<TThingCollection>
должно стать Room<TThingCollection, TThing>
- но для того, чтобы это работало, вам нужно добавить большеограничения:
public interface Room<TThingCollection<TThing>>
where TThingCollection : ThingCollection<TThing>
where TThing : IThing
{ }
public interface SpecialRoom<TThingCollection<TThing>> : Room<TThingCollection>
where TThingCollection : SpecialThingCollection<TThing>
where TThing : ISpecialThing
{ }
Или вы можете использовать интерфейсы, которые вы объявили как общие ограничения (измените TThing
на IThing
и ISpecialThing
:
// Room(s)
public interface Room<TThingCollection> where TThingCollection : ThingCollection<IThing> { }
public interface SpecialRoom<TThingCollection> : Room<TThingCollection> where TThingCollection : SpecialThingCollection<ISpecialThing> { }