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

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

Let me give example:

  1. I have some generic class/interface definition:

    interface IGenericCar< T > {...}

  2. 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.

 

回答1

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 { ... }

 

评论:

Ok, but what should I do if I need to use my generic type T inside the IGarage<TCar>? I can't see any possibility in option2. The best solution would be if IGarage<TCar> found type T by analysing type TCar.
– pt12lol
May 16 '15 at 7:32

 

回答2

Would it make any sense to do something like:

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

 

How to add a C# generic type constraint on another generic base class?

After checking that it compiles, I will upgrade it to an answer.

From your question and comments, you want the parameter to be Entity<Something>. You do not need to use the parametrized types directly as a type, it can be use to parametrize a parameter.

So just do

 public void Update(Entity<T1> entity) where ....

 

 

 

posted @ 2021-10-13 17:28  ChuckLu  阅读(23)  评论(0编辑  收藏  举报