[英]Refactor foreach statement to LINQ
我一直在從事一個項目,實際上是在重構一些代碼。 我遇到了很多foreach和if語句,這些語句可以很容易地用LINQ替換。
但是我有這個代碼片段,我想知道如何使它更具功能性。
foreach (var notification in notifications)
{
if (_emailService.SendEmail(notification.Message.Subject, notification.Message.Body, notification.Message.MailTo))
{
successNotificationIDs.AddRange(notification.ID);
}
else
{
errorCount++;
}
}
EmailService的SendEmail方法返回布爾值。 如果執行成功,它將向聲明的集合(successNotificationsIDs)中添加一個IEnumerable of Int。 如果沒有,我將增加errorCount變量。
要將序列中的項目分為通過某些謂詞的所有項和未通過謂詞的所有項,可以使用ToLookup
。 使用謂詞作為選擇器:
var lookup = notifications.ToLookup(notification =>
_emailService.SendEmail(notification.Message.Subject,
notification.Message.Body,
notification.Message.MailTo));
var successfulIDs = lookup[true].SelectMany(notification => notification.ID);
var errorCount = lookup[false].Count();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.