internal static Expression ReduceListInit(Expression listExpression, ReadOnlyCollection<ElementInit> initializers, bool keepOnStack)
{
ParameterExpression listVar = Expression.Variable(listExpression.Type, name: null);
int count = initializers.Count;
var block = new Expression[count + 2];
block[0] = Expression.Assign(listVar, listExpression);
for (int i = 0; i < count; i++)
{
ElementInit element = initializers[i];
block[i + 1] = Expression.Call(listVar, element.AddMethod, element.Arguments);
}
block[count + 1] = keepOnStack ? (Expression)listVar : Utils.Empty;
return Expression.Block(new TrueReadOnlyCollection<Expression>(block));
}