1

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

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

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

对比

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

对比

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

对比

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

在这种特定情况下,我需要将其评估为:“If(sending == true AND e.AssetType == AssetType.Notecard)”

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

4

3 回答 3

2

这些代码没有任何区别。

if ((sending) && (e.AssetType == AssetType.Notecard))if (sending && e.AssetType == AssetType.Notecard)评估为同一件事。

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


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

  • ||是一个逻辑或。只有一个条件为 TRUE 就足够了if

  • &&是一个逻辑与。 所有条件都必须为真才能通过if

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

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

于 2012-08-20T15:26:45.233 回答
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

比较字符串而不考虑大小写和当前文化)

于 2012-08-20T15:39:02.790 回答
1

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

有几点需要澄清:

  • 在这种情况下,括号不是必需的,它只是额外的代码。
  • 当您使用逻辑与运算时,始终评估第一部分,并且仅当第一部分为真时才评估第二部分。
  • 当您使用逻辑或运算时,始终会评估这两个部分。
  • 当你有超过+2个表达式时,用括号来阐明你的意图。eg与 Operators Precedenceif(A && B || C)相同。但是如果你想先执行逻辑或运算,那么你必须使用括号来覆盖优先级if((A && B) || C)if(A && (B || C))
    • 此外,if(A && B == C)if(A && (B == C))等式运算的优先级高于逻辑与,因此相同
于 2018-04-18T21:11:20.050 回答