c# - 无法转换从通用基础继承的对象

标签 c# generics inheritance

我正在努力掌握更复杂的继承结构和泛型,并且我正在尝试为遵循此规则的当前项目创建一些架构。我目前的问题是出现此错误:

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 时作为TListHandler我收到提到的错误,我认为这是不可避免的,因为 FooList<ItemBase>FooItem类型为 ItemBase我可以做到这一点var handler = new ListHandler<Foo>(); .

谁能解释为什么我不能这样做或我做错了什么?

最佳答案

A ListBase<ItemBase>ListBase<FooItem> 不同.
特别是,您可以添加任何ItemBaseListBase<ItemBase> .

您需要接受两个通用参数:

public class ListHandler<TList, TItem> where T : ListBase<TItem> where TItem : ItemBase { }

关于c# - 无法转换从通用基础继承的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13124479/

相关文章:

c# - 取代 BizTalk WCF 服务

c# - 捕获 global.asax 中的特定错误

javascript - 让一个javascript函数继承一个原型(prototype)

inheritance - 静态方法不能继承?

java - 从父类(super class)调用方法不起作用 Java

c# - Azure Functions 运行时无法访问

c# - 如何确保只有一个任务实例在运行?

java - 这个 Java 泛型范例是做什么的,它叫什么?

java - 使用枚举集的泛型类构造函数的问题

java - 如何摆脱通用生成器的 "Type Safety"警告?