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>
有帮助吗?

解决方案

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

其他提示

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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top