Question

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>
Était-ce utile?

La solution

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

Autres conseils

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

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top