Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-如何正确使用所有扩展方法_C#_Linq - Fatal编程技术网

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

C#-如何正确使用所有扩展方法,c#,linq,C#,Linq,我对此代码有问题: foreach (var newRecipient in productTaskEntity.ProductTaskRecipient) { if (existingRecipients.All(i => i.EmailAddress != newRecipient.EmailAddress && i.RecipientTypeId != newRecipient.RecipientTypeId)); {

我对此代码有问题:

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

我正在尝试遍历现有的收件人集合,查看具有相同电子邮件地址和收件人类型的记录上是否有匹配项,如果没有,则添加新的收件人。不知何故,条件总是求值为true,并且接收者被不必要地添加。我想我误解了“All”的工作原理。

问题在于分号
在if之后。它终止if,并且始终执行下一条语句,因为它不再是if的一部分

if (existingRecipients.All(i => i.EmailAddress != newRecipient.EmailAddress &&
    i.RecipientTypeId != newRecipient.RecipientTypeId)); // <=== REMOVE THIS ";" !
{
    existingProductTask.ProductTaskRecipient.Add(newRecipient);
}
这意味着if始终只与一条语句关联。例如在

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

{ statement1; statement2; ... }
像这样

if (condition) { statement1; statement2; ... }
还要注意,在C#中有一个所谓的空语句。在

statement1; ; statement2;
statement1
statement2
之间有一条空语句。空语句什么也不做,只是一个语法工件。如果你写信

if (condition);

然后if语句后面跟着一个空语句。

伙计,这太尴尬了。谢谢,需要另一双眼睛
隐藏和寻找冠军自1958年以来在修复分号问题后。。。从语义上讲,您想要的是
!现有收件人。任何(…)
测试为
=
的收件人。这两种方法都可以,但读起来更好,就像“如果没有任何匹配项,请添加它”。。。C#给出了一个警告,如果你这样做,可能会出现错误的空语句。团队策略:消除所有警告(即不加抑制)。问题的标题与问题本身无关。
if (condition);