pan*_*njo 1 c# collections asp.net-mvc
我有IPagedList接口,实现IList这样的
public interface IPagedList<T> : IList<T>
{
int PageCount { get; }
int TotalItemCount { get; }
int PageIndex { get; }
...
}
Run Code Online (Sandbox Code Playgroud)
现在我想用它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;
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我想知道为什么这不能转换成
public IPagedList<MyViewModel> Data
{
get
....
Run Code Online (Sandbox Code Playgroud)
导致IPagedList工具IList,我该如何解决这个问题.
IPagedList<T>实现IList<T>并List<T>实现IList<T>,这是正确的.
但这并不意味着a 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;
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我想知道为什么这不能转换为
public IPagedList Data { get
您不能再使用List<T>,因为它没有实现您的接口。您已经创建了自己的类来实现IPagedList<T>.
更重要的问题是您有一个Data返回分页列表的属性。如何处理分页并不明显。
第一个虽然它在枚举列表时延迟加载每个页面。但事实并非如此?您可能想重新考虑您的设计。
我会改为使用组合创建一个新界面:
interface IPagedResult<T>
{
int PageCount { get; }
int TotalItemCount { get; }
int PageIndex { get; }
IEnumerable<T> Page {get; }
}
Run Code Online (Sandbox Code Playgroud)
更明显的是返回单个页面,您不必创建自己的列表类。
| 归档时间: |
|
| 查看次数: |
7943 次 |
| 最近记录: |