gpt4 book ai didi

c# - 如何使用 Expression 构建匿名类型?

转载 作者:IT王子 更新时间:2023-10-29 04:30:41 25 4
gpt4 key购买 nike

在 C# 3.0 中,您可以使用 Expression 创建具有以下语法的类:

var exp = Expression.New(typeof(MyClass));
var lambda = LambdaExpression.Lambda(exp);
object myObj = lambda.Compile().DynamicInvoke();

但是如何使用 Expression 创建匿名类呢?

//anonymousType = typeof(new{ Name="abc", Num=123});
Type anonymousType = Expression.NewAnonymousType??? <--How to do ?
var exp = Expression.New(anonymousType);
var lambda = LambdaExpression.Lambda(exp);
object myObj = lambda.Compile().DynamicInvoke();

最佳答案

你很接近,但你必须知道匿名类型没有默认构造函数。以下代码打印 { 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);

关于c# - 如何使用 Expression 构建匿名类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3740532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com