c# - returns - El orden está garantizado en una expresión o
summary returns c# (4)
¿Se
ListEqualByComparer.TryGetOrCreate
siempre aListEqualByComparer.TryGetOrCreate
antes 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 || y
x || y
se evalúa comox ? true : y
x ? true : y
. En otras palabras, primero se evalúax
y se convierte a tipobool
. Entonces, six
es verdadero, el resultado de la operación estrue
. De lo contrario,y
se 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