抱歉问一个愚蠢的问题
是否可能以这样的方式对泛型强制执行约束,使得给定的T可以从任何引用类型中派生,除了一些A、B、C(其中A、B、C是引用类型)。(即)
Where T : class except A,B,C
不可以。但是你可以在运行时检查这些类:
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)
));
}
}
}
NotSupportedException
。我编辑了帖子来使用这个方法。 - Sam Harwell不行。类型不能被否定。where子句只允许你限制到特定的类型。