Насколько я понимаю, предупреждение "Доступ к измененному закрытию" служит предупреждением о доступе к локальным переменным от делегата, когда делегат может быть сохранен и вызван позже или вызван в другом потоке, так что локальная переменная нефактически доступно во время фактического выполнения кода.Это, конечно, разумно.
Но что, если я создаю делегата, который, как я знаю, будет немедленно вызван в том же потоке?Предупреждение тогда не нужно.Например, предупреждение генерируется в коде:
delegate void Consume();
private void ConsumeConsume(Consume c)
{
c();
}
public int Hello()
{
int a = 0;
ConsumeConsume(() => { a += 9; });
a = 1;
return a;
}
Здесь не может быть проблем, поскольку ConsumeConsume
всегда вызывает функцию немедленно.Есть ли способ обойти это?Есть ли способ аннотировать функцию ConsumeConsume
, чтобы указать ReSharper, что делегат будет вызван немедленно?
Интересно, когда я заменяю строку ConsumeConsume(() => { a += 9; });
на:
new List<int>(new[] {1}).ForEach(i => { a += 9; });
который делает то же самое, предупреждение не генерируется.Это встроенное исключение для ReSharper или я могу сделать что-то подобное, чтобы указать, что делегат вызывается немедленно?
Я знаю, что могу отключить эти предупреждения, но это нежелательный результат.