Constraints on Type Parameters for object and list of objects

328 Views Asked by At

Is there a way to implement constraint type parameters where T is from a base class or if T is a list containing the "base class"?

Something looking like this :

public class SomeClass<T> where T : MyBaseClass, IList<MyBaseClass>
3

There are 3 best solutions below

0
On BEST ANSWER

No, you can't create generic constraint to work like OR.

And just to point that that kind of constraint would have been useless: you would not be able to use neither methods defined in BaseClass nor these from IList (because T could have been the first or the second).

0
On

Why don't you implement an interface on the BaseClass and do.

public class SomeClass<T> where T : class, IBaseInterface

This also guarantees that the children are implementing the appropriate contracts that you want to expose.

0
On

No but you could have overloaded methods that take one or the other:

public class SomeClass<T> where T : MyBaseClass
{
    public void Process(T instance)
    {
    }

    public void Process(IList<T> list)
    {
    }
}