首页 > 解决方案 > 无法到达每个循环之外的变量

问题描述

我试图将变量“电子邮件”添加到存储队列中,但无法到达 for each 循环之外的变量。

如果我在 forloop 中调用“AddMessageToQueue”,代码工作正常,除了它创建 1000x 条消息而不是一条,我怎样才能到达 forloop 之外的“email”变量?

 using (var clientContext = new ClientContext(""))
            {
                clientContext.Credentials = new SharePointOnlineCredentials(userName, result);

                Web web = clientContext.Web;
                RecycleBinItemCollection rbiColl = web.RecycleBin;
                clientContext.Load(rbiColl);

                clientContext.ExecuteQuery();

                foreach (RecycleBinItem rbiItem in rbiColl)
                {
                    log.Info(rbiItem.Title, "ran");
                }

                log.Info($"C# Timer trigger function executed at: {DateTime.Now}");

                var recyclebinItems = clientContext.Site.GetRecycleBinItems(null, 100, false, RecycleBinOrderBy.DeletedDate, RecycleBinItemState.FirstStageRecycleBin);
                clientContext.Load(recyclebinItems);
                clientContext.ExecuteQuery();
                var items = recyclebinItems.Where(rbi => rbi.DeletedDate > DateTime.Now.ToUniversalTime().AddMinutes(-10)).ToList();

                for (int i = items.Count() - 1; i >= 0; i--)
                {
                    var item = items[i];
                    if (item.DirName == "sites/EnfokamTulips/Lists/Tulips")
                    {
                        item.Restore();
                        clientContext.ExecuteQueryRetry();
                        var list = clientContext.Web.GetListByTitle("Tulips");
                        var itemID = item.LeafName.Replace("_.000", "");
                        var listItem = list.GetItemById(itemID);

                        clientContext.Load(listItem);
                        clientContext.ExecuteQueryRetry();

                        var usr = listItem["TulipOwner"] as FieldUserValue;
                        var email = usr.Email;
                        log.Info(email);
                        listItem.Recycle();
                        clientContext.ExecuteQueryRetry();

                    }
                }
              AddMessageToQueue("tulip", queryString, email);
            }
        }

        public static string queryString = ""; ```

        public static void AddMessageToQueue(string tulip, string queryString, object email)
        {
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(queryString);
            CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
            CloudQueue queue = queueClient.GetQueueReference(tulip);
            queue.CreateIfNotExists();
            if (email is string)
            {
                queue.AddMessage(new CloudQueueMessage((string)email));
            }
            else
            {
                string message = JsonConvert.SerializeObject(email);
                queue.AddMessage(new CloudQueueMessage(message));
            }
        }
    }
}

标签: c#

解决方案


只需在循环前声明变量for即可到达循环外的变量:

var email = string.Empty;
for (int i = items.Count() - 1; i >= 0; i--)
{
    var item = items[i];
    if (item.DirName == "sites/EnfokamTulips/Lists/Tulips")
    {
        // the code is omitted for the brevity
        email = usr.Email;
    }
}

推荐阅读