我有一个通用基类,我想允许两种类型ITest
或IBoldface
之一。
我的基类如下所示:
public abstract class BaseTestingCollections<T> where T : ITest, IBoldface
{
...
}
继承它的类之一如下所示:
public class TestCollection : BaseTestingCollections<ITest>, ITestCollection
{
...
}
编译时出现此错误:
在通用类型或方法“ DomainLogic.BaseTestingCollections”中,类型DomainLogic.ITest'不能用作类型参数“ T”。没有从“ DomainLogic.ITest”到“ DomainLogic.IBoldface”的隐式引用转换。
最佳答案
这样的“或”或“限制”是不可能完成的(正如我确定您已经注意到的那样,逗号更像&&
而不是||
)。您可以使用不同的名称(一个BaseTestingCollectionsTest<T> where T : ITest
,另一个BaseTestingCollectionsBoldface<T> where T : IBoldface
)创建两个不同的抽象类,或者删除静态限制并将检查放在运行时。或使ITest
或IBoldface
之一扩展另一个,或扩展公共接口(如果它们共享成员)。
这是在运行时检查的示例:
public abstract class BaseTestingCollections<T>
{
public BaseTestingCollections()
{
if (!typeof(ITest).IsAssignableFrom(typeof(T)) && !typeof(IBoldface).IsAssignableFrom(typeof(T)))
throw new Exception();
}
}