2010-11-27 15 views

Respuesta

18

Este error le está diciendo que la referencia a pubConfig dentro de su consulta va a utilizar el valor de pubConfigen el momento de la consulta se evalúa, y no en el momento en el que lo define y lo almacena en pubConfigSettings.

En términos prácticos, estará bien si la consulta se evalúa "sobre el terreno". Si lo mantiene para su posterior evaluación, y el valor de pubConfig cambia mientras tanto, encontrará resultados inesperados.

9

Usted está cerrando la variable de bucle que es considered harmful. La consulta hace referencia a la variable , no el valor que la variable tenía cuando se creó la consulta. No está claro si le causará o no un problema en su ejemplo de código específico (depende de lo que haga con la consulta que ha creado), pero en general debe evitar esto porque puede causar problemas difíciles de depurar.

Una solución simple es tomar una copia de la variable de ciclo antes de hacer referencia a ella en su consulta.

foreach (var pubConfig in ...) 
{ 
    var pubConfig2 = pubConfig; 
    // Use pubConfig2 instead of pubConfig in the query. 
} 
+0

Veo que hacer una copia borra el error. Simplemente parece una gran cantidad de código adicional (si no estás haciendo nada dañino) ¡Gracias por el consejo! –

1

No hay problema siempre que la variable no se modifique durante la vida útil de la lambda.

Si modificas la variable y usas la lambda nuevamente, la lambda obtendrá el nuevo valor de la variable, que puede ser confuso o incluso no peligroso.

Para deshacerse de la advertencia, puede crear una variable en el ámbito interno copiando la variable del ámbito externo y utilizándola en la lambda.

Cuestiones relacionadas