我们可以在泛型类型参数上指定一个“派生自”约束,如下所示:
class Bar<T> where T : IFooGenerator
有没有办法指定NOT派生自?
我的用例:我有一堆可并行化的FooGenerator
s,每个都有相同的并行化代码,但我们不希望它们总是并行化。
public class FooGenerator : IFooGenerator
{
public Foo GenerateFoo() { ... }
}
因此,我创建了一个通用容器类来并行生成 Foo:
public class ParallelFooGenerator<T> : IFooGenerator where T : IFooGenerator
{
public Foo GenerateFoo()
{
//Call T.GenerateFoo() a bunch in parallel
}
}
因为我想要FooGenerator
并且ParallelFooGenerator<FooGenerator>
可以互换,所以我制作ParallelFooGenerator : IFooGenerator
. 但是,我显然不想ParallelFooGenerator<ParallelFooGenerator>
合法。
那么,作为一个辅助问题,如果“非源自”约束是不可能的,是否有更好的设计方法?