在类型'Task <list <sharepointdto.rootobject >>的变量上使用foreach语句

时间:2018-08-29 13:29:36

标签: c# api

我试图在C#应用程序中多次调用Sharepoint API,并将返回的结果存储到List中,如下所示

  private async Task<List<sDTO.RootObject>> getfromSharepoint()
    {
       List<SharepointDTO.RootObject> returnObj = new List<SharepointDTO.RootObject>();
       var result = new UpdateCoreStrains.SharepointDTO.RootObject();
        ......
        // Calling GET Sharepoint Site
        try
        {
            for (int i = 0; i < 10000; i = i + 5000)
            {
                SP_StrainCodes = "GetByTitle('S%20Codes')/items?$skiptoken=Paged=TRUE%26p_ID=" + i + "&$top=1";
                core_URL = BaseURL_SP + SP_StrainCodes;

                var response = client_sharePoint.GetAsync(core_URL).Result;
                var responsedata = await response.Content.ReadAsStringAsync();
                 result = JsonConvert.DeserializeObject<sDTO.RootObject>(responsedata);
                    if (result.d.Next == null)
                        continue;

                }
                returnObj.Add(result);
            }
            return returnObj;
        }

现在我要在其他函数中调用getfromSharepoint(),并且要遍历List来验证数据

    public List<numberList>  getListFromSharepoint()
    {
        List<umberList> nums = new List<numberList>();
        try
        {

            Task<List<sDTO.RootObject>> sharepointList = getfromSharepoint();

            foreach(sDTO retSharepointobj in sharepointList)
            {

                if (retSharepointobj == null ||
                    retSharepointobj.Id == 0 ||
                    retSharepointobj.Result.
                    retSharepointobj.Result == null ||
                    retSharepointobj.Result.d == null ||
                    retSharepointobj.Result.d.results == null ||
                    retSharepointobj.Result.d.results.Count == 0
                    )
                {
                    return nums;  // count = 0, return an empty list
                }

但是我收到类似

的错误

foreach statement cannot operate on variables of type 'Task<List<SharepointDTO.RootObject>>' because 'Task<List<SharepointDTO.RootObject>>' does not contain a public definition for 'GetEnumerator'如何遍历>

3 个答案:

答案 0 :(得分:1)

尝试将getListFromSharepoint方法设置为async

 public async Task<List<numberList>> getListFromSharepoint()
    {
        List<umberList> nums = new List<numberList>();
        try
        {
            //Here we use an await to get result from getfromSharepoint() method call.
            List<sDTO.RootObject> sharepointList = await getfromSharepoint();

            foreach (sDTO retSharepointobj in sharepointList)
            {
                //your rest of code is same here
            }

编辑:

从其他函数中调用getListFromSharepoint方法为

List<numberList> result = await getListFromSharepoint();

OR

您可以简单地使用Result中的getfromSharepoint

List<sDTO.RootObject> sharepointList = await getfromSharepoint().Result;

答案 1 :(得分:0)

Ths:Task<List<sDTO.RootObject>> sharepointList = getfromSharepoint();正在调用async方法,该方法不会立即返回。您的代码应如下所示:

List<sDTO.RootObject> sharepointList = getfromSharepoint().Result;

答案 2 :(得分:0)

此处您要遍历sharepointList类型为Task的项目,该项目不包含“ GetEnumerator”的公共定义(如错误消息所述)。但是您可以迭代Task的结果,因为Task的结果为RootObject的集合。如果您要遍历List<sDTO.RootObject>中的sharepointList,则应使用:

foreach (sDTO.RootObject retSharepointobj in sharepointList.Result)
{
   // here each retSharepointobj  of type RootObject 
   // code here
}