【发布时间】:2019-10-11 08:00:44
【问题描述】:
这可能是一个愚蠢的问题,但我找不到解决方案。
我有这个结构(为简洁起见):
namespace Test
{
public interface IEntity
{ }
public class BaseEntity : IEntity
{ }
public class OneEntity : BaseEntity
{ }
public class Configuration<T> where T : IEntity
{
}
public class Service
{
public Dictionary<string, Configuration<IEntity>> Configurations = new Dictionary<string, Configuration<IEntity>>();
public void RegisterConfiguration(string name, Configuration<T> configuration) where T : IEntity
{
if(Configurations.ContainsKey(name))
return;
Configurations.Add(name, configuration); //Error: Unable to convert Configuration<T> to Configuration<IEntity>
}
}
}
我想我无法将泛型类型转换为接口,但我该如何实现呢?我可以将RegisterConfiguration 写为:public void RegisterConfiguration(string name, Configuration<IEntity> configuration),但是当我用我的一个实体调用它时它会失败(即使它们都实现了IEntity)。
一定有一些我对泛型没有正确理解的东西,但我不知道是什么。
【问题讨论】:
-
仅仅因为
T1和T2这两种类型表现出特定的继承/实现关系,并不意味着由这两种类型参数化的单个泛型类型(G<T1>,G<T2>) 表现出 same 关系。 (除了协方差和反方差的一些例外)