Код, который вы спросили, это:
// List<CustomClass> foo;
var listV = Expression.Variable(typeof(List<CustomClass>), "foo");
// new List<CustomClass>()
var newL = Expression.New(typeof(List<CustomClass>));
// foo = new List<CustomClass>()
var assV = Expression.Assign(listV, newL);
// new CustomClass()
var newEl = Expression.New(typeof(CustomClass));
// foo.Add(new CustomClass())
var addEl = Expression.Call(listV, "Add", null, newEl);
var be = Expression.Block(new[] { listV }, assV, addEl);
Обратите внимание, что я даю вам блочное выражение ... Вы можете поместить его в большее выражение (или создать на его основе лямбда-выражение), но оно не может быть запущено напрямую (потому что это не лямбда-выражение )
Пример лямбда-выражения:
var be = Expression.Block(new[] { listV }, assV, addEl, listV);
var lambda = Expression.Lambda<Func<List<CustomClass>>>(be);
var func = lambda.Compile();
List<CustomClass> res = func();
(обратите внимание, что я меняю переменную be
)