2013-08-21 58 views
-1

我试图发送一个电子邮件,一旦所有这些条件被发现是真的,但我的问题是,即使条件设置为false,它仍然发送电子邮件。例如,如果var3或var4或var5是“否”,那么我不想发送电子邮件。下面是伪代码是什么我检查,他们都必须是真实的,以发送电子邮件指出:如何使用C#在asp.net中使用IF语句

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(); 
} 
+3

您发布的代码不会编译。发布您的真实代码 –

+0

“当前”代码有语法错误。 – asawyer

+0

@Sam,asawyer,为什么你认为OP已经设法编写可编译代码?我相信这就是他在这里问这个问题的原因。 –

回答

0

因为你的条件是相当大的,没有什么可以阻止你写多个小方法,以提高可读性。

此外,而不是检查!= "&nbsp",您应该使用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"); 
} 

,你会得到这样的结果:

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

同时,始终确保您的代码工作,你应该考虑写Unit Tests

2

做这样的

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

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

看起来你应该使用逻辑AND(&&),你使用逻辑OR(||

所以下面将评估为true,如果任何var3var4,或var5在不"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# order of operations以确保您的操作正确无误,如果不是,请将其加括号。

作注,||确实


终于之前&&得到评估,还应该创建一个debugger一个断点,并确保您的变量是什么,你认为他们应该。记住,你正在做的比较是区分大小写的。

3

尝试在真正的代码这

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

使用括号在你的伪代码做同样的方式:

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

我的猜测是,你的括号关闭。

1

现在您的支票只有在所有三个增值税不是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")) 
    )