首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将IEnumerable<TEntity>转换为TCollection

无法将IEnumerable<TEntity>转换为TCollection
EN

Stack Overflow用户
提问于 2014-08-29 15:01:58
回答 1查看 56关注 0票数 0

我定义了以下接口:

代码语言:javascript
复制
public interface IReadOnlyRepositoryBase<TEntity, TKey, TCollection>
    where TEntity : EntityBase<TKey>
    where TCollection: IEnumerable<TEntity>

{
    TCollection GetAll();
}

public interface IReadOnlyRepository<TEntity, TKey> :
    IReadOnlyRepositoryBase<TEntity, TKey, IEnumerable<TEntity>>
    where TEntity : EntityBase<TKey>
{ }

// there is also "ILazyReadOnlyRepository" where TCollection
// is IQueryable<T>..

现在,我无法在实现中返回IEnumerable<TEntity>,因为IEnumerable<TEntity>似乎不能转换为TCollection

代码语言:javascript
复制
// basic repository impl for NHibernate
public abstract class NHibernateReadOnlyRepositoryBase<TEntity, TKey, TCollection> 
    : IReadOnlyRepositoryBase<TEntity, TKey, TCollection>
    where TEntity : EntityBase<TKey>
    where TCollection : IEnumerable<TEntity>
{

    public TCollection GetAll()
    {
          // doesn't work...
          return _session.QueryOver<TEntity>().List();
    }    

据我所见,该方法返回一个实现IList<T>IEnumerable<T>,因此这显然可以工作吗?我怎样才能实现我想要的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-29 15:07:49

您不应该使用泛型参数TCollection。使用泛型参数的一种方式是,该接口的用户应该能够定义该类型是什么,在这种情况下,该方法返回的类型是什么。

显然这对你来说是个问题。方法的实现需要无条件地返回一个IEnumerable,而不是调用方指定的未知类型。只要删除这个通用的参数就可以实现这一点。

代码语言:javascript
复制
public interface IReadOnlyRepositoryBase<TEntity, TKey>
    where TEntity : EntityBase<TKey>
{
    IQueryable<TEntity> GetAll();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25571005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档