typeparam returns remarks name c# operator-precedence

c# - returns - El orden está garantizado en una expresión o



summary returns c# (4)

¿Se ListEqualByComparer.TryGetOrCreate siempre a ListEqualByComparer.TryGetOrCreate antes de EnumerableEqualByComparer.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 tipo bool , o cuando los operandos son de tipos que no definen un operator & o operator | aplicable operator | , pero si define conversiones implícitas a bool , la operación se procesa de la siguiente manera:

[...]

La operación x || y x || y se evalúa como x ? true : y x ? true : y . En otras palabras, primero se evalúa x y se convierte a tipo bool . Entonces, si x es verdadero, el resultado de la operación es true . De lo contrario, y se evalúa y convierte al tipo bool , 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