Вы близки, но вам нужно знать, что анонимные типы не имеют конструкторов по умолчанию. Следующий код печатает { Name = def, Num = 456 }
:
Type anonType = new { Name = "abc", Num = 123 }.GetType();
var exp = Expression.New(
anonType.GetConstructor(new[] { typeof(string), typeof(int) }),
Expression.Constant("def"),
Expression.Constant(456));
var lambda = LambdaExpression.Lambda(exp);
object myObj = lambda.Compile().DynamicInvoke();
Console.WriteLine(myObj);
Если вам не нужно создавать много экземпляров этого типа, Activator.CreateInstance
будет делать то же самое (это быстрее для нескольких экземпляров, но медленнее для многих). Этот код печатает { Name = ghi, Num = 789 }
:
Type anonType = new { Name = "abc", Num = 123 }.GetType();
object myObj = Activator.CreateInstance(anonType, "ghi", 789);
Console.WriteLine(myObj);