我正在努力掌握更复杂的继承结构和泛型,并且我正在尝试为遵循此规则的当前项目创建一些架构。我目前的问题是出现此错误:
Type argument 'Foo' does not inherit from or implement the constraint type 'ListBase'
public class ItemBase {}
public class ListBase<T> where T : ItemBase
{
public virtual List<T> ListExample {get; set; }
}
这些是我的基类,虽然它们的命名可能不合适,但我只是想展示一个简单的例子来说明我想要实现的目标。
public class FooItem : ItemBase { }
public class Foo : ListBase<FooItem>
{
public override List<FooItem> ListExample { get; set;}
}
因此我可以扩展列表的初始基类并使用它做更多的事情,但我想要一种处理所有这些类的通用方法。
public class ListHandler<T> where T : ListBase<ItemBase> { }
当我尝试通过 Foo
时作为T
到 ListHandler
我收到提到的错误,我认为这是不可避免的,因为 Foo
是 List<ItemBase>
和 FooItem
类型为 ItemBase
我可以做到这一点var handler = new ListHandler<Foo>();
.
谁能解释为什么我不能这样做或我做错了什么?
最佳答案
A ListBase<ItemBase>
与 ListBase<FooItem>
不同.
特别是,您可以添加任何种 ItemBase
到 ListBase<ItemBase>
.
您需要接受两个通用参数:
public class ListHandler<TList, TItem> where T : ListBase<TItem> where TItem : ItemBase { }
关于c# - 无法转换从通用基础继承的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13124479/