我有IPagedList接口,它实现了这样的IList

public interface IPagedList<T> : IList<T>
{
    int PageCount { get; }
    int TotalItemCount { get; }
    int PageIndex { get; }
    ...
}


现在,我想使用此IPagedList来分页表示数据。
我正在尝试将使用IList的现有代码转换为IPagedList

public IList<MyViewModel> Data
{
  get
  {
    List<MyViewModel> myVal = new List<MyViewModel>();
    foreach (MyModel m in data)
    {
       myVal.Add(new MyViewModel(m));
    }
    return myVal;
  }
}


所以,我想知道为什么不能将其转换为

public IPagedList<MyViewModel> Data
{
   get
    ....


原因IPagedList实现了IList,如何解决此问题。

最佳答案

IPagedList<T>实现IList<T>,并且List<T>也实现IList<T>,这是正确的。

但这并不意味着List<T>可以转换为IPagedList<T>。那仍然是两种不同的类型。想想看:保时捷是汽车,标致是汽车,但它们仍然不可互换。

您需要具有IPagedList<T>接口的具体实现。如果有一个,可以使用以下代码:

public IList<MyViewModel> Data
{
    get
    {
        var myVal = new PagedList<MyViewModel>();
        foreach (MyModel m in data)
        {
            myVal.Add(new MyViewModel(m));
        }
        return myVal;
    }
}

10-04 19:12