c# - 无法到达每个循环之外的变量
问题描述
我试图将变量“电子邮件”添加到存储队列中,但无法到达 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));
}
}
}
}
解决方案
只需在循环前声明变量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;
}
}
推荐阅读
- android - 基于导航抽屉选择kotlin的浮动动作按钮代码行为
- date - 当相关日期没有数据(过去和未来)时,如何使用相同的度量进行计算?
- java - 我需要帮助 ERROR E/AndroidRuntime: FATAL EXCEPTION: main
- python - 为我在我的类中定义的变量获取 NameError
- python - 我在构建剪刀石头布游戏时遇到问题(最好的 3 个版本)
- ruby-on-rails - 带有 Rails 错误的 Postgres 表分区
- android - 布局在小型设备上没有响应 (480x854)
- powerbi - Power BI - 合并多个客户表
- r - R Shiny - 缓存大数据帧
- python - 在 AWS Elastic Beanstalk 上如何修复“返回标头之前脚本超时:application.py”错误