2010-09-30 6 views
5

estoy trabajando con LINQ en VB.NET y, a veces llego a una consulta comoCómo suprimir de VB "variable de iteración no debe han utilizado en la expresión lambda"

For i = 0 To 10 
    Dim num = (From n In numbers Where n Mod i = 0 Select n).First() 
Next 

y luego viene la advertencia "Usar la variable de iteración en una expresión lambda puede tener resultados inesperados. En su lugar, cree una variable local dentro del ciclo y asígnele el valor de la variable de iteración".

Sé que no es una buena práctica usar la variable de iteración en la expresión lambda, porque las expresiones lambda se evalúan solo cuando es necesario. (This question es sobre eso)

Ahora mi pregunta es cómo suprimir esta advertencia en los casos en que la expresión se evalúa in situ, con construcciones como Primero(), Único(), Lista(), etc. (Es Sólo una advertencia, pero me gusta mi código limpio.)

(Declarar una variable local y pasando la variable de iteración que es una opción, pero estoy buscando una solución limpia.)

+3

* * ¿Por qué está usted Buscando "algo más"? –

+2

En un bloque de tres líneas (1.Para 2. DoSomething (LinqExpression) 3. Siguiente) simplemente no es bueno tener una cuarta línea 'Dim localVar = iterationVar'. Pero parece, esa es la mejor opción – jaraics

Respuesta

5

En este particular caso en que la lambda se evalúa inmediatamente, puede eliminar la advertencia de forma segura moviendo la declaración de la variable de iteración fuera del ciclo for.

Dim i = 0 
For i = 0 To 10 
... 

sí quiero subrayar sin embargo que esto sólo funciona si el lambda no se escape el bucle (verdadero para su escenario).

También aquí hay un enlace a un detallado artículo que escribí sobre esta advertencia (por qué existe, cómo evitarlo, etc ...)

+0

Gracias, eso también es una opción. (No es el mejor, pero tal vez no hay una mejor opción para esta solución) – jaraics

Cuestiones relacionadas