我有一个静态类DataSource
,它从文件中提取请求的数据并将其作为List<IInfrastructureEntity>.
返回TestRepository
(下方),我正在使用通用TEntity
,确定其类类型并从DataSource
或者至少尝试提取相应的数据。相反,我在每个return语句上得到以下编译时错误。即使任何TEntity
必须实现IInfrastructureEntity
。
无法隐式转换类型&#39; System.Collections.Generic.List<IInfrastructureEntity>
&#39;到&#39; System.Collections.Generic.List<TEntity>
&#39;
如何明确进行转换?
public class TestRepository<TEntity> : IRepository<TEntity> where TEntity : IInfrastructureEntity
{
public List<TEntity> GetData()
{
TEntity checkType = default(TEntity);
if (checkType is Member) return DataSource.Members;
if (checkType is MenuItem) return DataSource.MenuItems;
if (checkType is CRAWApplication) return DataSource.CRAWApplications;
if (checkType is CRAWEntitlement) return DataSource.CRAWEntitlements;
if (checkType is FOXGroup) return DataSource.FOXGroups;
throw new NotSupportedException( checkType.ToString() + " is not yet supported");
}
public List<TEntity> FindBy(Expression<Func<TEntity, bool>> predicate)
{
return GetData().AsQueryable().Where(predicate);
}
}
答案 0 :(得分:2)
您可以通过在每个列表中强制执行显式转换来解决此问题:
if (checkType is Member) return DataSource.Members.Cast<TEntity>().ToList();
问题是DataSource.Members
的类型是List<IInfrastructureEntity>
,而预期返回的类型是List<TEntity>
。实际上,每个Entity
都应该实现IInfrastructureEntity
,因为您已将其声明为where TEntity : IInfrastructureEntity
。但是,即使类型实现此接口,也不意味着此类型可以隐式转换为TEntity
对象。这就是你需要显式演员的原因。