Могу ли я использовать поле [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

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