返回值是IEnumerable而不是IPaged

时间:2011-09-11 12:07:11

标签: c# asp.net ajax web-services

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

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

IPaged&LT;&GT;是:

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

Paged&lt;&gt;从DoSomething返回的类实现了IPaged&lt;&gt;因此实现了IEnumerator GetEnumerator()

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

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

如何返回IPaged&lt;&gt;而不是IEnumerable&lt;&gt;从脚本服务?

1 个答案:

答案 0 :(得分:1)

有点猜测,但IEnumerable[<T>](以及有时候IList[<T>]优先于其他任何事物都是非常共同的,并跳入“ “分支(忽略”容器“上定义的任何属性)。

因此,我希望您最好不要IPaged<T>实施IEnumerable<T>。 这可能意味着必须更改几个地方才能添加.Items

另一种方法是添加ForJson()扩展方法,将类似的返回到IPaged<T>,但不实施IEnumerable[<T>]