返回值是IEnumerable而不是IPaged

本文关键字:IPaged IEnumerable 返回值 | 更新日期: 2023-09-27 18:08:19

我使用ScriptServices返回IPaged<>结果:

[WebService]
public IPaged<int> DoSomething() {
    ....
    ....
}

IPaged<>:

public interface IPaged<T> : IEnumerable where T : class
{
    int PageNumber { get; }
    int PageSize { get; }
    IEnumerable<T> Items { get; }
    int PagesCount { get; }
    int TotalItemsCount { get; }
}

从DoSomething返回的Paged<>类实现了IPaged<>,因此实现了IEnumerator GetEnumerator():

  public IEnumerator GetEnumerator()
    {
        return ((IEnumerable)Items).GetEnumerator();
    }

每当我从Javascript ajax调用DoSomething时,脚本服务引擎返回IEnumerable实例而不是IPaged,所以我得到一个数组(来自GetEnumerator()方法的Items成员)。

如何从脚本服务返回IPaged<>而不是IEnumerable<> ?

返回值是IEnumerable而不是IPaged

有点猜测,但这是非常常见的IEnumerable[<T>](有时IList[<T>]优先于其他任何东西,并跳转到" collection of"分支(忽略在"容器"上定义的任何属性)。

因此,我希望您最好的选择是不让IPaged<T>实现IEnumerable<T>。这可能意味着必须更改一些地方来添加.Items

另一种方法是添加一个ForJson()扩展方法,该方法返回与IPaged<T>类似的内容,但不实现IEnumerable[<T>]