Стоит ли LINQifying для моего кода получить доступ к переменной foreach в замыкании?
Напоминает название бутлег-лайв-записи Rolling Stones прошлых лет, Resharper острее, чем я »когда-нибудь буду; когда я проверил мой код, он сказал мне об закрытиях:
1)Loop:
foreach (var item in PlatypiIds)
{
var query = db.Table().Where(l => l.PlatypusId == item).
Where(l=> l.SentTimeUTC >= EarliestToShow).
Where(l=> l.SentTimeUTC l.SentTimeUTC);
if (query != null)
{
foreach (var q in query)
{
listLocs.Add(q);
}
}
}
... можно преобразовать в выражение LINQ:
listLocs.AddRange(from item in PlatypiIds select db.Table().Where(l => l.PlatypusId == item).Where(l => l.SentTimeUTC >= EarliestToShow).Where(l => l.SentTimeUTC l.SentTimeUTC) into query
where query != null from q in query select q);"
... но потом Решарпер рассказал мне позже оновый и улучшенный" код: "Доступ к переменной foreach при закрытии. Может иметь различное поведение при компиляции с разными версиями компилятора
Так каковы возможности компиляции с другой версией компилятора? Я имею в виду, яя не собираюсь идти назад, по версии, от VS2012 к VS2010, например ... ???
2) По этим строкам:
if (db != null)
db.Insert(new PlatypiRequested()
... этого кода:
using (var db = new SQLiteConnection(SQLitePath))
{
db.CreateTable();
db.RunInTransaction(() =>
{
if (db != null)
db.Insert(new PlatypiRequested()
{
PlatypusId = PlatypusId,
PlatypusName = PlatypusName,
InvitationSentLocal = invitationSentLocal
});
});
}
... Решарпер сообщает мне:Доступ к закрытой крышке "
Что это значит, и что мне с этим делать?