Es bien es utilizar yield
fuera de un bloque iterador - sólo significa que no está siendo utilizado como una palabra clave contextual .
Por ejemplo:
// No idea whether this is financially correct, but imagine it is :)
decimal yield = amountReturned/amountInvested;
En ese momento no es una palabra clave contextual (Es Nunca una palabra clave "lleno"), es sólo un identificador. A menos que sea claramente la mejor opción en términos de claridad normal, trataría de evitar usarlo de todos modos, pero a veces podría ser.
Sólo se puede utilizar como palabra clave contextual de yield return
y yield break
, que sólo son válidas siempre en un bloque de iterador. (Son lo que convierte un método en un iterador.)
EDITAR: Para responder a su pregunta "should this be allowed" ... sí, debería. De lo contrario, todo el código C# 1 existente que usó yield
como identificador se habría vuelto inválido cuando se haya liberado C# 2. Se debe usar con cuidado, y el equipo C# se ha asegurado de que nunca sea realmente ambiguo, pero tiene sentido que sea válido.
Lo mismo ocurre con muchas otras palabras clave contextuales: "desde", "seleccionar", "dónde", etc. ¿Desea evitar que sean identificadores alguna vez?
** Sí **, es muy útil. – dlev
Quien haya ideado la línea "devolver rendimiento"; es un genio malvado de proporciones épicas. –
¡Tenemos un buen hombre de código base! Hice esta pregunta porque estaba argumentando en contra de este tipo de codificación ... Quería escuchar lo que piensa la comunidad al respecto – GETah