c# - returns - El orden está garantizado en una expresión o
summary returns c# (4)
¿Se
ListEqualByComparer.TryGetOrCreatesiempre aListEqualByComparer.TryGetOrCreateantes deEnumerableEqualByComparer.TryGetOrCreate?
Sí, y como || está en cortocircuito, la segunda llamada solo se realizará si la primera llamada devuelve false .
De la especificación C # 5, sección 7.12.1:
Cuando los operandos de
&&o||son de tipobool, o cuando los operandos son de tipos que no definen unoperator &ooperator |aplicableoperator |, pero si define conversiones implícitas abool, la operación se procesa de la siguiente manera:[...]
La operación
x || yx || yse evalúa comox ? true : yx ? true : y. En otras palabras, primero se evalúaxy se convierte a tipobool. Entonces, sixes verdadero, el resultado de la operación estrue. De lo contrario,yse evalúa y convierte al tipobool, y esto se convierte en el resultado de la operación.
Esta pregunta ya tiene una respuesta aquí:
Tengo una expresión como esta:
EqualByComparer comparer;
if (ListEqualByComparer.TryGetOrCreate(x, y, out comparer) ||
EnumerableEqualByComparer.TryGetOrCreate(x, y, out comparer))
{
return comparer.Equals(x, y, compareItem, settings, referencePairs);
}
¿Se ListEqualByComparer.TryGetOrCreate siempre a ListEqualByComparer.TryGetOrCreate antes de EnumerableEqualByComparer.TryGetOrCreate ?
Desde C # Referencia ( link ):
El operador OR condicional ( || ) realiza un OR lógico de sus operandos bool . Si el primer operando se evalúa como verdadero , el segundo operando no se evalúa. Si el primer operando se evalúa como falso , el segundo operador determina si la expresión OR como un todo se evalúa como verdadera o falsa .
Sí, el pedido está garantizado. Estados de documentation :
Los operadores lógicos también garantizan la evaluación de sus operandos de izquierda a derecha. Sin embargo, evalúan el menor número de operandos necesarios para determinar el resultado de la expresión. Esto se llama evaluación de "cortocircuito". Por lo tanto, algunos operandos de la expresión pueden no ser evaluados.
Sí, los detalles están en la documentation .
La segunda condición solo se evalúa si la primera es falsa