开发者

Generic constraint exclusion

Sorry for as开发者_如何转开发king silly question

Is it possible to enforce constraint on generic in such a way that the given T can be derived from any reference Type except some A,B,C (where A,B,C are reference types). (i.e)

Where T : class except A,B,C


No. But you could check for these classes at run-time:

public class Foo<T>
{
    static Foo()
    {
        // one of the following depending on what you're trying to do
        if (typeof(A).IsAssignableFrom(typeof(T)))
        {
            throw new NotSupportedException(string.Format(
                "Generic type Foo<T> cannot be instantiated with {0} because it derives from or implements {1}.",
                typeof(T),
                typeof(A)
                ));
        }

        if (typeof(T) == typeof(A))
        {
            throw new NotSupportedException(string.Format(
                "Generic type Foo<T> cannot be instantiated with type {0}.",
                typeof(A)
                ));
        }
    }
}


No, you can only specify that it does inherit from a particular type, is a value or reference type, or that it must have a default constructor. Remember that this is for the benefit of the compiler, not the developer. :)

The best you could probably do is throw an exception at run time.


Sorry No. You can find out how you can constrain here...


No. There is no negation of types. The where clause only allows you to contrain to a specific type.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜