【发布时间】:2020-03-30 15:04:23
【问题描述】:
我不确定我的问题是否清楚,所以我将通过代码说明:
基本上我有一个加载器接口,泛型类型是一个接口。 在这里,Cat 和 Dog 都实现了 IAnimal。
private readonly IAnimalLoader<Cat> _catLoader;
private readonly IAnimalLoader<Dog> _dogLoader;
private IAnimalLoader<IAnimal> animalLoader;
public AnimalService(IAnimalLoader<Cat> catLoader,
IAnimalLoader<Dog> dogLoader)
{
_catLoader = catLoader;
_dogLoader = dogLoader;
}
问题在于尝试将任一加载器分配给 animalLoader:
if (animal == AnimalType.Cat)
{
animalLoader = _catLoader;
}
else
{
animalLoader = _dogLoader;
}
C# 抱怨 没有从 Cat 到 IAnimal 的隐式转换,即使它实现了它。似乎没有演员可以解决这个问题。
知道我做错了什么吗?
编辑:这里是 IAnimalLoader 澄清
public interface IAnimalLoader<T> where T : IAnimal
{
IQueryable<T> GetAllQueryable();
Task<T> GetAsync(string id);
}
【问题讨论】:
-
另外,你能告诉我们
IAnimalLoader的代码 -
@Sean 问题已更新详细信息
-
为什么需要将
_catLoader分配给animalLoader?当您同时存储两者时,为什么不直接调用它们呢? -
@Sean 有它——基本上,问题是你不能在
IAnimalLoader<IAnimal>和IAnimalLoader<Cat>之间来回切换,而不用关键字in或out这样它就知道由于类型不同会发生什么。如果类型不同并且没有这样的标记,C# 唯一能做的就是检查从一种类型到另一种类型的隐式转换,这解释了您看到的错误。查看 Sean 的链接以获取有关如何操作的更多信息。
标签: c# .net-core object-oriented-analysis