Aus wie ich das verstehe, wird Resharper einen Fehler auslösen, wenn Sie auf eine Variable von einem Delegaten (Schließung) zugreifen, und ändern Sie dann die Variable, bevor Sie den Delegaten ausführen. Dies geschieht meist, wenn Sie auf eine for-Schleifenvariable in einem Delegaten/Lambda zugreifen und diese außerhalb der Schleife ausführen. Wenn Ihr Code lautet:
foreach (filter in filters)
{
if (filter != null) {
if (filter.CityId != 0) {
ads = ads.Where(x => x.Ad.CityId == filter.CityId);
}
if (filter.BusinesCategoryId != 0) {
ads = ads.Where(x => x.BusinessCategoryId == filter.BusinesCategoryId);
}
}
}
return ads.ToList()
Dann wird es sich nicht so verhalten, wie Sie es erwarten würden. Aber wenn Sie die Lambda-Ausdrücke innerhalb des Loop-Bereichs ausführen, hätten Sie kein Problem.
I wont erklären, warum es so verhält, weil eine Menge Leute es schon sehr gut erklärt:
UPDATE: Um zu antworten "Warum lokale Variable?" ist, weil die Behebung des obigen Problems eine lokale Variable verwendet (d. h. innerhalb der Schleife) und diese in Ihrem Lambda verwendet. Auf diese Weise schließen Sie die verschiedenen Instanzen der Variablen für jede Instanz des Lambda.
Welche lokale Variable, 'ads'? – Tigran