0

一旦发现所有这些条件都为真,我就会尝试发送电子邮件,但我的问题是即使条件设置为假,它仍在发送电子邮件。例如,如果 var3 或 var4 或 var5 为“NO”,那么我不想发送电子邮件。这是我正在检查的伪代码,它们都必须是真实的才能发送电子邮件:

If(var1 is not blank And var2 is not set to “YES” And (either var3 OR var4 OR var5 are not set to “NO”)
Then 
{
Send_Email();
}

这是我当前的代码:

if var1 != (" ") && var2!= "YES" && var3!= ("NO") || var4!= ("NO") || var5!= ("NO") ))
{
sendEmail();
}
4

7 回答 7

4

尝试这个

if (var1 != " " && var2!= "YES" && (var3!= "NO" || var4!= "NO" || var5!= "NO"))
{
   sendEmail();
}
于 2013-08-21T18:21:51.143 回答
4

在真实代码中使用括号,就像在伪代码中一样:

if (var1 != (" ") && var2!= "YES" && (var3!= ("NO") || var4!= ("NO") || var5!= ("NO")))
{
    sendEmail();
}
于 2013-08-21T18:22:02.283 回答
3

像这样做

if( var1 != " " && var2!= "YES" && var3!= "NO" && var4!= "NO" && var5!= "NO" )
{
  sendEmail();
}
于 2013-08-21T18:21:40.493 回答
3

if either var3 or var4 or var5 is “NO” then I don’t want to send email out.

看起来您应该&&在使用逻辑 OR( ) 的地方使用逻辑 AND( ||)

因此,如果,或中的任何一个不是var3var4var5"NO"

var3!= ("NO") || var4!= ("NO") || var5!= ("NO") 

将它们全部更改为,&&以便您最终得到

var1 != (" ") && var2!= "YES" && var3!= ("NO") && var4!= ("NO") && var5!= ("NO")


其他一些观察...

if 语句的开头括号丢失,您应该添加它。

if (var1 != (" ") && var2!= "YES" && var3!= ("NO") || var4!= ("NO") || var5!= ("NO") ))
{
    sendEmail();
}

其次,很难说你想要你的条件是什么。与所有的||&&。您应该查看C# 操作顺序以确保您做对了,如果不是,请用括号括起来。

作为一个注释,之前&&得到评估||


最后,您还应该使用调试器创建一个断点,并确保您的变量是您认为应该的那样。请记住,您所做的比较区分大小写。

于 2013-08-21T18:21:47.713 回答
2
if(var1 != (" ") && var2 ! = "YES" && (var3 != ("NO") || var4 != ("NO") || var5 != "NO")))

我的猜测是您的括号已关闭。

于 2013-08-21T18:22:27.137 回答
2

现在,您的检查仅在三个变量都不是时才有效NO。这可能更清楚:

if (var1 != (" ") && 
    var2!= "YES" && 
    !(var3 == ("NO") || var4 == ("NO") || var5 == ("NO") )  // Any of these being "NO" will fail the `if` check
   )
{
   sendEmail();
}

从逻辑上讲,它与以下内容相同:

if (var1 != (" ") && 
    var2!= "YES" && 
    (var3 != ("NO") && var4 != ("NO") && var5 != ("NO") )
   )
于 2013-08-21T18:22:29.027 回答
1

Since your conditions are pretty big, nothing stops you from writing multiple small methods to enhance readability.

Also, instead of checking for != "&nbsp", you should use string.IsNullOrEmpty.

private bool IsVar1Blank(string var1)
{
    return string.IsNullOrWhiteSpace(var1);
}

private bool IsVar2SetToYes(string var2)
{
    return var2 == "YES";
}

private bool IsAnOtherVariableNotSetToNo(string var3, string var4, string var5)
{
    return var3 != ("NO") || var4 != ("NO") || var5 != ("NO");
}

And you get this result :

if (!IsVar1Blank(var1) && !IsVar2SetToYes(var2) && IsAnOtherVariableNotSetToNo(var3, var4, var5)
{
    sendEmail();
}

Also, to always be sure your code works, you should really look into writing Unit Tests.

于 2013-08-21T18:30:13.110 回答