代码之家  ›  专栏  ›  技术社区  ›  Geo

为什么泛型转换不适用于这段代码?

  •  2
  • Geo  · 技术社区  · 17 年前
    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; }
      
    2 回复  |  直到 17 年前
        1
  •  1
  •   dtb    17 年前

    list T 但是 FindAllBuckets 是一种 IQueryable<T> .

    取决于退货类型 _repository.GetAllBuckets()

    IQueryable<T> IS3Repository.FindAllBuckets<T>()
    {
        return _repository.GetAllBuckets()
                          .Cast<T>()
                          .AsQueryable();
    }
    
        2
  •  0
  •   Andrew Hare    17 年前

    试试这个:

    IQueryable<T> IS3Repository.FindAllBuckets<T>()
    {
        IQueryable<T> list = _repository
                             .GetAllBuckets()
                             .Cast<T>()
                             .AsQueryable();
    
        return list ?? new List<T>().AsQueryable();
    }
    

    原始方法的主要问题是,您试图返回 T 而不是一个 IQueryable<T> .