C# generic "where constraint" with "any generic type" definition?

c#, generics, type-constraints, where-clause

Solution

There are typically 2 ways to achieve this.

Option1: Add another parameter to `IGarrage` representing the `T` which should be passed into the `IGenericCar<T>` constraint:

interface IGarrage<TCar,TOther> where TCar : IGenericCar<TOther> { ... }

Option2: Define a base interface for `IGenericCar<T>` which is not generic and constrain against that interface

interface IGenericCar { ... }
interface IGenericCar<T> : IGenericCar { ... }
interface IGarrage<TCar> where TCar : IGenericCar { ... }

Problem

Let me give example: I have some generic class/interface definition: `interface IGenericCar< T > {...}` I have another class/interface that I want to relate with class above, for example: `interface IGarrage< TCar > : where TCar: IGenericCar< (**any type here**) > {...}` Basically, I want my generic IGarrage to be dependent on `IGenericCar`, regardless if it's `IGenericCar<int>` or `IGenericCar<System.Color>`, because I don't have any dependency to that type.

Original source