У меня есть функция, которая создает делегат, используя деревья выражений. Внутри этого выражения я использую переменную, захваченную из нескольких параметров, переданных функции. Фактическое дерево выражений довольно велико, например:
Delegate GenerateFunction<T>(T current, IList<T> parents) {
var currentExpr = Expression.Parameter(typeof(T), "current");
var parentsExpr = Expression.Parameter(parents.getType(), "parents");
var parameters = new List<ParameterExpression>();
....
return Expression.Lambda(Expression.Block(new List<ParameterExpression> { parentsExpr, currentExpr }, ....), parameters.ToArray()).Compile();
}
Затем я вызываю этот метод из другого метода, прежде чем передавать эту функцию другой функции. Как только все это сделано, я хочу получить доступ к содержимому родителей, которое обновляется в дереве выражений.
Кажется, что все компилируется, и мое выражение выглядит нормально, но когда я его запускаю, я появляюсь (хотя и не могу быть уверенным), что получаю нулевые ссылочные исключения при доступе к переменной parent (внутри выражения/закрытия).
Думаю, я хотел бы знать, что я делаю что-то неправильно или это возможно, а также советы для понимания того, что происходит. Кажется, я не могу найти какие-либо поднятые (?) Локальные переменные внутри метода, поэтому мне интересно, вообще ли они захватываются?
Спасибо, Марк