Joh*_*son 17 c# operator-precedence
我有一个这样的表达式:
EqualByComparer comparer;
if (ListEqualByComparer.TryGetOrCreate(x, y, out comparer) ||
EnumerableEqualByComparer.TryGetOrCreate(x, y, out comparer))
{
return comparer.Equals(x, y, compareItem, settings, referencePairs);
}
Run Code Online (Sandbox Code Playgroud)
将ListEqualByComparer.TryGetOrCreate始终被调用之前EnumerableEqualByComparer.TryGetOrCreate?
Jon*_*eet 29
将
ListEqualByComparer.TryGetOrCreate始终被调用之前EnumerableEqualByComparer.TryGetOrCreate?
是的,并且正如||短路一样,只有在第一次呼叫返回时才会进行第二次呼叫false.
从C#5规范,第7.12.1节:
当操作数为
&&或者||是类型bool的操作数时,或者操作数是没有定义适用的类型,operator &或者operator |确实定义了隐式转换时bool,操作按如下方式处理:[...]
该操作
x || y被评估为x ? true : y.换句话说,x首先评估并转换为类型bool.然后,如果x为true,则操作的结果为true.否则,y将进行评估并转换为类型bool,这将成为操作的结果.