45

Tenemos operadores de asignación equivalentes para todos los operadores lógicos, operadores de desplazamiento, operadores aditivos y todos los operadores multiplicativos.¿Por qué no hay operadores || = o && = en C#?

¿Por qué se omitieron los operadores lógicos? ¿Existe una buena razón técnica por la que es difícil?

+0

@ p.campbell - ¡Algunos de ellos realmente son! – Yuck

+0

¿Hay alguna razón por la que los usarías? –

+0

¿Puedes darnos un ejemplo en el que serían útiles? – Fosco

Respuesta

47

¿Por qué los operadores lógicos se quedan afuera? ¿Hay una buena razón técnica por la que es difícil?

No lo hicieron. Puede hacer &= o |= o ^= si lo desea.

bool b1 = false; 
bool b2 = true; 
b1 |= b2; // means b1 = b1 | b2 

Los || y && operadores no tienen una forma compuesta porque francamente, son un poco tonto. ¿En qué circunstancias le gustaría decir

b1 ||= b2; 
b1 &&= b2; 

tal que el lado derecho no se evalúa si el lado izquierdo no cambia? Parece que solo unas pocas personas usarían esta característica, entonces, ¿por qué ponerla?

Para obtener más información sobre el compuesto operadores ver mi artículo serio aquí:

http://blogs.msdn.com/b/ericlippert/archive/2011/03/29/compound-assignment-part-one.aspx

y el artículo de abril a los tontos de seguimiento aquí:

http://blogs.msdn.com/b/ericlippert/archive/2011/04/01/compound-assignment-part-two.aspx

+12

He querido hacer un cortocircuito en la asignación de compuestos antes. Nadie los usa porque no existen. Ver también http://stackoverflow.com/questions/2324549 que brinda una serie de ejemplos de casos de uso. –

+3

¿Puede explicar que "solo algunas personas lo usarán, agrega complejidad y existe una forma de cumplir con la meta establecida de todos modos" para algunos miembros de mi empresa (que no se nombrarán)? Lo intenté y aparentemente fallé. :) –

+4

re: "¿En qué circunstancias le gustaría decir' b1 || = b2; ... '"? Estas circunstancias: tengo una serie de elementos y necesito probar alguna condición para cada elemento, así que recorro el conjunto y creo un 'total acumulado' de géneros: 'resultado = VERDADERO; for (i ...) {result && = a [i];}'O podría querer hacer un total acumulado de 'OR's. De hecho, tuve una situación similar en un proyecto en el que estoy trabajando ahora. ¿Eso es tan tonto? – daver

Cuestiones relacionadas