昨年のローリング・ストーンズのブートレグ・ライヴ・レコーディングのタイトルを彷彿とさせるResharperは、私がこれまで以上に鋭くしています。コードを検査してもらったところ、クロージャーに関して次のように言われました。
1) 「ループ:
foreach (var item in PlatypiIds)
{
var query = db.Table<Locations>().Where(l => l.PlatypusId == item).
Where(l=> l.SentTimeUTC >= EarliestToShow).
Where(l=> l.SentTimeUTC <= LatestToShow).
OrderBy(l => l.SentTimeUTC);
if (query != null)
{
foreach (var q in query)
{
listLocs.Add(q);
}
}
}
...LINQ式に変換できます:
listLocs.AddRange(from item in PlatypiIds select db.Table<Locations>().Where(l => l.PlatypusId == item).Where(l => l.SentTimeUTC >= EarliestToShow).Where(l => l.SentTimeUTC <= LatestToShow).OrderBy(l => l.SentTimeUTC) into query
where query != null from q in query select q);"
...しかし、Resharper は後で「新しく改善された」コードについて次のように語っています。
では、異なるバージョンのコンパイラでコンパイルする可能性は何ですか? つまり、たとえば、VS2012 から VS2010 にバージョンを遡るつもりはありません...???
2) これらの行で:
if (db != null)
db.Insert(new PlatypiRequested()
...このコードの:
using (var db = new SQLiteConnection(SQLitePath))
{
db.CreateTable<PlatypiRequested>();
db.RunInTransaction(() =>
{
if (db != null)
db.Insert(new PlatypiRequested()
{
PlatypusId = PlatypusId,
PlatypusName = PlatypusName,
InvitationSentLocal = invitationSentLocal
});
});
}
...Resharper は、「破棄されたクロージャへのアクセス」を通知します
それはどういう意味で、どうすればいいですか?