我有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;
}
}