Могу ли я использовать поле [ThreadStatic] со статической локальной функцией, чтобы избежать создания замыканий?C#

Место общения программистов C#
Ответить
Anonymous
 Могу ли я использовать поле [ThreadStatic] со статической локальной функцией, чтобы избежать создания замыканий?

Сообщение Anonymous »

Допустим, у меня есть этот метод. Предположим, что Items представляет собой массив строк:

Код: Выделить всё

public int GetCount(char c)
{
return Items.Count(x => x.Contains(c));
}
Я знаю, что C# создает замыкание для Count(x => x.Contains(c)) каждый раз, когда вызывается метод, поскольку захватывается локальная переменная c.
Однако мне было любопытно узнать, можно ли использовать поле [ThreadStatic] и статическую локальную функцию, чтобы хитро избежать создания замыкания:

Код: Выделить всё

[ThreadStatic]
private static char _c;

public int GetCount(char c)
{
_c = c;

return Items.Count(func);

static bool func(string x) => x.Contains(_c);
}
Остановит ли это создание замыкания? Обратите внимание, что я использую LINQ только в качестве примера. Предположим, что я должен взять предоставленный пользователем объект делегата и не могу выполнить рефакторинг иначе.

Подробнее здесь: https://stackoverflow.com/questions/798 ... d-creating
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»