Будучи укушенным этим, я имею привычку включать локально определенные переменные во внутреннюю область, которую я использую для переноса в любое замыкание. В вашем примере:
foreach (var s in strings)
{
query = query.Where(i => i.Prop == s); // access to modified closure
я делаю:
foreach (var s in strings)
{
string search = s;
query = query.Where(i => i.Prop == search); // New definition ensures unique per iteration.
Когда у вас есть эта привычка, вы можете избежать ее в очень редком случае, который вы на самом деле намеревались привязать к внешним областям. Честно говоря, я не думаю, что когда-либо делал это.
Вы должны включить « field:
» как часть атрибута [NonSerialized]
в событие
.
т.е.:
[field: NonSerialized]
public event EventHandler Roar;