防止这个foreach循环提前停止

本文关键字:循环 foreach | 更新日期: 2023-09-27 18:04:52

上周我发布了这个问题,这个问题的答案是,AtTask API确实有一个设置限制,要改变这一点,需要使用"$$ limit ",正如AtTask网站所解释的那样。

这是非常有用的,除了我不确定在哪里放"$$LIMIT",因为我正在使用c#和任务c#示例不包括这个。我一直在搜索任务开发人员网站寻找解决方案,但一直空手而归。

我如何在c#中使用这段代码来提高调用限制?

编辑

上一个问题中包含的代码示例:

JToken projects = client.Search(ObjCode.PROJECT, new {groupID = userGroupID});
foreach (var j in projects["data"].Children())
{
    Console.WriteLine("# " + counter + " Name: {0}", j.Value<string>("name")); 
    counter++;
}

防止这个foreach循环提前停止

看起来他们的API将传递给Search()的第二个参数的对象转换为查询字符串参数。在你的例子中

client.Search(ObjCode.PROJECT, new {groupID = userGroupID});

创建以下url(123代表您的组id)。

GET /attask/api/project/search?groupID=123

所以要在url中添加$$LIMIT,在对象中添加$$LIMIT。不幸的是,c#不允许使用$ in命名。所以我的建议是稍微修改一下他们的c# API。首先将对Search()的调用更改为

client.Search(ObjCode.PROJECT, new {groupID = userGroupID, __Limit = 200 });

然后,在AtTaskRestClient.cs中,将文件末尾的parameterObjectToStringArray()更改为以下内容:

private string[] parameterObjectToStringArray(object parameters, params string[] toAdd) {
    var properties = parameters.GetType().GetProperties();
    List<string> p = new List<string>(properties.Length);
    p.AddRange(toAdd);
    foreach(var prop in properties) {
        string propName = prop.Name;
        if (propName.StartsWith("__"))
        {
            propName = "$$" + propName.Substring(2);
        }
        string line = string.Format("{0}={1}", propName, prop.GetValue(parameters, null));
        p.Add(line);
    }
    return p.ToArray();
}

这个改变也允许你使用其他以$$开头的参数,比如$$FIRST