This question already has answers here:
Execution order of conditions in C# If statement

(8个答案)


4年前关闭。




我有一个这样的表达:
EqualByComparer comparer;
if (ListEqualByComparer.TryGetOrCreate(x, y, out comparer) ||
    EnumerableEqualByComparer.TryGetOrCreate(x, y, out comparer))
{
    return comparer.Equals(x, y, compareItem, settings, referencePairs);
}

会在ListEqualByComparer.TryGetOrCreate之前始终调用EnumerableEqualByComparer.TryGetOrCreate吗?

最佳答案


是的,并且由于||处于短路状态,因此只有在第一个调用返回false时才进行第二个调用。
根据C#5规范的第7.12.1节:

08-25 23:42