如果声明澄清了AND / OR

时间:2012-08-20 15:25:13

标签: c# if-statement

我很遗憾地提出这么简单的问题。我只是需要一些澄清,因为有时我会混淆差异。

有人可以通过解释以下if语句之间的区别来帮助我吗?

sending = true;
if (sending && e.AssetType == AssetType.Notecard) //#1

VS

if ((sending) && (e.AssetType == AssetType.Notecard)) //#2

VS。

if (sending || e.AssetType == AssetType.Notecard) //#3

VS

if ((sending) || (e.AssetType == AssetType.Notecard)) //#4

在这个特定情况下,我需要它来评估类似的东西: “if(发送== true和e.AssetType == AssetType.Notecard)”

在另一种情况下,我需要if语句来检查一个字符串和列表的内容,如: “if(string ==”Name“或List.Contains(”string“))

3 个答案:

答案 0 :(得分:2)

这些代码中没有任何差异。

if ((sending) && (e.AssetType == AssetType.Notecard))if (sending && e.AssetType == AssetType.Notecard)评估同样的事情。

if(sending == true)if(sending)也是一样的。


如果您在询问||&&之间的区别:

  • ||是LOGICAL-OR。只有一个条件才能通过if

  • 就足够了
  • &&是LOGICAL-AND。 所有条件必须为TRUE才能通过if

在这两种情况下,评估都将从从左到右进行

序列示例: if ((sending) && (e.AssetType == AssetType.Notecard)) =>如果sending==true..rest..

答案 1 :(得分:2)

第一个和第二个语句是相同的(在这种情况下,由于C#评估优先级,括号不是强制性的!)

if (sending && e.AssetType == AssetType.Notecard)
if ((sending) && (e.AssetType == AssetType.Notecard))

就像:

if ((sending == true) && e.AssetType == AssetType.Notecard))
if ((sending) && (e.AssetType == AssetType.Notecard))

同样,3°和4°语句也会给出相同的结果,原因与上述相同:http://msdn.microsoft.com/en-us/library/6a71f45d.aspx

我会使用这些陈述:

if (sending && (e.AssetType == AssetType.Notecard))

if ((string == "Name") || List.Contains("string"))

(但请注意字符串比较模式,例如大/小写和文化:

String.Compare(string, "Name", StringComparison.CurrentCultureIgnoreCase) == 0

比较字符串,不考虑案例和当前文化)

答案 2 :(得分:0)

对于第一个和第二个语句产生相同的结果,第三个和第四个语句也产生相同的结果。

要澄清的几件事情:

  • 在这种情况下,括号不是必需的,只是额外的代码。
  • 使用Logical-AND操作时,始终会评估第一部分,只有第一部分为真时才会评估第二部分。
  • 使用Logical-OR操作时,始终会评估这两个部分。
  • 当您有超过+2个表达式时,请使用括号来阐明您的意图。例如if(A && B || C)if((A && B) || C)相同,因为the Operators Precedence。但如果您希望首先执行逻辑或运算,则必须使用括号来覆盖优先级if(A && (B || C))
    • 此外,if(A && B == C)if(A && (B == C))相同,因为Equality操作的优先级高于logical-AND