繁体   English   中英

Lambdas中的类型推断

[英]Type inference in lambdas

我有此功能:

 public class Repository : IRepository
    {
        public List<TEntity> GetOrdered<TEntity, TSortKey>(Func<TEntity, TSortKey> orderBy, int take, params string[] includePaths) where TEntity : AbstractEntity
        {
            var query = (from ent in this.Context.Set<TEntity>() select ent).IncludePaths(includePaths);

            return query.OrderBy(orderBy).Take(take).ToList();
        }
    }    

调用它:

List<Project> p = repository.GetOrdered<Project, string>(x => x.Name, 10);

我想消除在调用时给它第二个通用参数的需要,从API角度来看,这是一个破坏交易的因素。

怎么做?

从API角度来看,这是一个破坏交易的因素

然后考虑您的交易失败了……您不能部分推断通用参数。 如果您的存储库是通用的,则可以执行以下操作:

 public class Repository<TEntity> : IRepository<TEntity> where TEntity : AbstractEntity
{
    public List<TEntity> GetOrdered<TSortKey>(Func<TEntity, TSortKey> orderBy, int take, params string[] includePaths) 
    {
        var query = (from ent in this.Context.Set<TEntity>() select ent).IncludePaths(includePaths);

        return query.OrderBy(orderBy).Take(take).ToList();
    }
}  

然后做

List<Project> p = repository.GetOrdered(x => x.Name, 10);

但是我不知道这种改变对您是否可能。

编译器可以推断所有类型参数,或者您必须全部指定它们。 但是您可以显式指定lambda表达式的参数类型,例如:

List<Project> p = repository.GetOrdered((Project x) => x.Name, 10);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM