Reputation: 2593
Sorry for asking 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
Upvotes: 4
Views: 636
Reputation: 217313
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)
));
}
}
}
Upvotes: 5
Reputation: 41
No. There is no negation of types. The where clause only allows you to contrain to a specific type.
Upvotes: 0
Reputation: 39335
Sorry No. You can find out how you can constrain here...
Upvotes: 1
Reputation: 11457
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.
Upvotes: 3