【问题标题】:Running the same method multiple times with different parameters in c#在c#中使用不同的参数多次运行相同的方法
【发布时间】:2016-07-28 23:20:05
【问题描述】:

我正在调用 API 来获取联系人列表(它们可能在 100 或 1000 中)并且一次只列出 100 个列表,它给了我这个分页选项,列表末尾有一个名为“下一页”的对象并带有指向下一个 100 的 URL,依此类推..

所以在我的 c# 代码中,我得到了前 100 个并循环遍历它们(做某事)并查找“下一页”对象并获取 URL 并重新调用 API 等。看起来下一页链去了取决于我们有多少联系人。

您能否告诉我是否有办法让我循环遍历相同的代码,并且仍然能够使用来自“下一页”对象的新 URL 并为我得到的每 100 个运行逻辑?

【问题讨论】:

  • 为什么不使用类的属性来保存呢?真的不确定问题是什么,如果您已经拥有所有变量,为什么不保留对它们的引用?
  • 是的,但是如何重新启动相同的方法?
  • 你能复制你使用的代码吗? @Bokbob

标签: c# restful-url


【解决方案1】:

伪代码,因为我们没有具体的例子可以使用,但是...

大多数带有分页功能的 API 都会有一个项目总数。您可以设置每次迭代的最大项目数并像这样跟踪它,或者检查 null next_object,具体取决于 API 处理它的方式。

    List<ApiObject> GetObjects() {

        const int ITERATION_COUNT = 100;
        int objectsCount = GetAPICount();

        var ApiObjects = new List<ApiObject>();

        for (int i = 0; i < objectsCount; i+= ITERATION_COUNT) {

            // get the next 100
            var apiObjects = callToAPI(i, ITERATION_COUNT); // pass the current offset, request the max per call
            ApiObjects.AddRange(apiObjects);

        }   // this loop will stop after you've reached objectsCount, so you should have all

        return ApiObjects;
    }

    // alternatively:

    List<ApiObject> GetObjects() {

        var nextObject = null;
        var ApiObjects = new List<ApiObject>();

        // get the first batch
        var apiObjects = callToAPI(null);
        ApiObjects.AddRange(apiObjects);
        nextObject = callResponse.nextObject;

        // and continue to loop until there's none left
        while (nextObject != null) {            
            var apiObjects = callToAPI(null);
            ApiObjects.AddRange(apiObjects);
            nextObject = callResponse.nextObject;   
        }

        return apiObjects;  
    }

无论如何,这都是基本思想,根据两种常用的 Web 服务方法(遗漏了很多细节,因为这不是有效的代码,而只是为了演示一般方法)。

【讨论】:

  • 很高兴为您提供帮助。附带说明一下,通常最好先从 Web 服务中检索所有内容(将它们全部放入一个集合中),然后在检索完所有内容后然后处理整个集合。这使“Web 服务窗口”保持狭窄,并有助于将数据源与实际业务逻辑分开。 (这里一个值得注意的例外是,如果您有大量数据要获取并希望开始以异步方式处理它,在这种情况下这种方法会有所改变)
  • 是的,关于数据我不确定我们可以期待多少。但是所有调用都是同步的,因为另一个调用取决于第一次调用的结果等等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 2015-10-07
相关资源
最近更新 更多