繁体   English   中英

为什么泛型转换在此部分代码上不起作用?

[英]Why Generic Casting is not working on this section of code?

IQueryable<T> IS3Repository.FindAllBuckets<T>()
{
  IQueryable<object> list = _repository.GetAllBuckets().Cast<object>().AsQueryable();
  return list == null ? default(T) : (T)list;
}

这是错误:错误3无法将类型'T'隐式转换为'System.Linq.IQueryable'。 存在显式转换(您是否缺少演员表?)

我正在实现此接口:

 IQueryable<T> FindAllBuckets<T>();

问题是什么?

这是我尝试过的:

  1.  IQueryable<T> IS3Repository.FindAllBuckets<T>() { IQueryable<object> list = _repository .GetAllBuckets() .Cast<object>().AsQueryable(); return list == null ? list.DefaultIfEmpty().AsQueryable() : list; } 

您正在将list强制转换为T但是FindAllBuckets的返回值类型为IQueryable<T>

根据_repository.GetAllBuckets()的返回类型,这应该可以工作:

IQueryable<T> IS3Repository.FindAllBuckets<T>()
{
    return _repository.GetAllBuckets()
                      .Cast<T>()
                      .AsQueryable();
}

尝试这个:

IQueryable<T> IS3Repository.FindAllBuckets<T>()
{
    IQueryable<T> list = _repository
                         .GetAllBuckets()
                         .Cast<T>()
                         .AsQueryable();

    return list ?? new List<T>().AsQueryable();
}

原始方法的主要问题是您试图返回T的实例,而不是IQueryable<T>的实例。

暂无
暂无

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

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