我有以下接口,一个用于实体,一个用于某些逻辑:
public interface IItem
{
int Id { get; set; }
}
public interface IGenerator
{
IList<IItem> Generate();
}
和实施:
public class ItemA : IItem
{
public int Id { get; set; }
public string Name { get; set; }
}
public class ItemAGenerator : IGenerator
{
public IList<ItemA> Generate()
{
// do stuff
return List<ItemA>;
}
}
该实现不起作用,它表示它没有匹配的返回类型,所以我也尝试过:
public class ItemAGenerator : IGenerator
{
public IList<IItem> Generate()
{
// do stuff
return List<ItemA>;
}
}
它不起作用,它说:不能隐式地将类型List<IItem>
转换为List<ItemA>
。
如何让它发挥作用?我在这里失踪了什么。
答案 0 :(得分:2)
只需将列表创建为List<IItem>
,但可以向其添加ItemA
。
public class ItemAGenerator : IGenerator
{
public IList<IItem> Generate()
{
var list = new List<IItem>();
list.Add(new ItemA());
return list;
}
}
答案 1 :(得分:1)
只需IGenerator
通用。然后,您可以指定将返回的类型。
public interface IGenerator<T> where T : IItem
{
IList<T> Generate();
}
public class ItemAGenerator : IGenerator<ItemA>
{
public IList<ItemA> Generate()
{
// do stuff
return List<ItemA>;
}
}