Замыкания были введены в язык для решения этой самой проблемы.
Захватив соответствующую переменную, вы можете предоставить ей хранилище, которое «переживает» содержащий метод:
// Note that the 'input' variable is captured by the lambda.
pd.PrintPage += (sender, e) => Print(e.Graphics, input);
...
static void Print(Graphics g, string input) { ... }
Обратите внимание, что это очень удобная функция;То, как компилятор решает эту проблему от вашего имени, подозрительно похоже на ваше собственное существующее решение.(Существуют определенные различия, например, захваченная переменная заканчивается как поле вновь созданного объекта некоторого другого (сгенерированного) класса. Ваше существующее решение не делает этого: у вас есть one «временное» хранилище для экземпляра вашего класса, а не для вызова на PrintIt
, что нехорошо - например, не поточно-ориентировано)