2010-09-30 15 views
5

Ich arbeite mit LINQ in VB.NET und manchmal bekomme ich eine Abfrage wieWie VB zu unterdrücken

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

und dann kommt es die Warnung „Iteration Variable sollte in Lambda-Ausdruck nicht verwendet worden“ "Die Verwendung der Iterationsvariablen in einem Lambda-Ausdruck kann zu unerwarteten Ergebnissen führen. Erstellen Sie stattdessen eine lokale Variable innerhalb der Schleife und weisen Sie ihr den Wert der Iterationsvariablen zu."

Ich weiß, dass es nicht empfehlenswert ist, die Iterationsvariable im Lambda-Ausdruck zu verwenden, da Lambda-Ausdrücke nur bei Bedarf ausgewertet werden. (This question ist darüber)

Jetzt ist meine Frage, wie diese Warnung in Fällen unterdrückt werden, in denen der Ausdruck vor Ort ausgewertet wird, mit Konstruktionen wie First(), Single(), ToList() usw. (Es ist nur eine Warnung, aber ich mag meinen Code sauber.)

(eine lokale Variable und das Bestehen der Iterationsvariable deklarieren es eine Option, aber ich bin für eine saubere Lösung.)

+3

* Warum * sind Sie auf der Suche nach "etwas anderem"? –

+2

In einem dreizeiligen Block (1.Für 2. DoSomething (LinqExpression) 3. Weiter) ist es einfach nicht nett, eine vierte Zeile 'Dim localVar = iterationVar' zu haben. Aber es scheint, das ist die beste Option – jaraics

Antwort

5

In diesem speziellen Wenn das Lambda sofort ausgewertet wird, können Sie die Warnung sicher eliminieren, indem Sie die Deklaration der Iterationsvariablen außerhalb der for-Schleife verschieben.

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

Ich möchte jedoch betonen, dass dies nur funktioniert, wenn die Lambda nicht die for-Schleife (true für Ihr Szenario) nicht entgehen.

Auch hier ist ein detaillierter Link zu einem Artikel, den ich auf dieser Warnung geschrieben (warum es existiert, wie es zu vermeiden, etc ...)

+0

Danke, das ist auch eine Option. (Es ist nicht das beste, aber vielleicht gibt es keine beste Option für diese Lösung) – jaraics

Verwandte Themen