C#-如何正确使用所有扩展方法

时间:2019-07-03 17:17:46

标签: c# linq

此代码有问题:

foreach (var newRecipient in productTaskEntity.ProductTaskRecipient)
{
    if (existingRecipients.All(i => i.EmailAddress != newRecipient.EmailAddress &&
        i.RecipientTypeId != newRecipient.RecipientTypeId));
    {
        existingProductTask.ProductTaskRecipient.Add(newRecipient);
    }
}

我正在尝试遍历现有的收件人集合,以查看记录中是否存在具有相同电子邮件地址和收件人类型的匹配项,如果不匹配,请添加新的收件人。条件总是以某种方式评估为true,并且不必要地添加了收件人。我想我误会了“全部”的工作原理。

1 个答案:

答案 0 :(得分:3)

问题是if后的分号;。它终止if并始终执行next语句,因为它不再是if的一部分。

if (existingRecipients.All(i => i.EmailAddress != newRecipient.EmailAddress &&
    i.RecipientTypeId != newRecipient.RecipientTypeId)); // <=== REMOVE THIS ";" !
{
    existingProductTask.ProductTaskRecipient.Add(newRecipient);
}

在C#中,if语句定义为

if (condition) statement

这意味着if始终仅与一个语句关联。例如。在

if (condition) statement1; statement2;

只有statement1属于if语句。如果需要执行一系列语句,请使用复合语句:

{ statement1; statement2; ... }

像这样

if (condition) { statement1; statement2; ... }

还要注意,在C#中有一个所谓的空语句。在

statement1; ; statement2;

statement1statement2之间有一个空语句。空语句不执行任何操作,仅是语法工件。如果你写

if (condition);

然后是if语句,后跟一个空语句。