我很遗憾地提出这么简单的问题。我只是需要一些澄清,因为有时我会混淆差异。
有人可以通过解释以下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“))
答案 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)
对于第一个和第二个语句产生相同的结果,第三个和第四个语句也产生相同的结果。
要澄清的几件事情:
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