gpt4 book ai didi

c# - 带有表达式树的复杂构建器方法

转载 作者:行者123 更新时间:2023-11-30 21:05:54 24 4
gpt4 key购买 nike

假设我必须在运行时创建以下方法

Type someType = ...; // assigned somewhere

var method = (presenter) =>
{
var instance = new SomeType(); // I've only default constructor here
instance.SomeProperty = presenter;
return instance;
}

有人知道如何使用表达式树在运行时创建这样的方法吗?

最佳答案

这里的关键是使用Expression.Block 来获取多语句lambda。你可以使用类似的东西:

void Main()
{
var p = Expression.Parameter(typeof(int), "presenter");
var instance = Expression.Variable(typeof(Foo), "instance");
var ctor = typeof(Foo).GetConstructor(new Type[0]);
var block = Expression.Block(new [] { instance },
Expression.Assign(instance, Expression.New(ctor)),
Expression.Assign(Expression.Property(instance, "SomeProperty"), p),
instance
);

var lambda = Expression.Lambda<Func<int,Foo>>(block, p);
Foo f = lambda.Compile()(5);
Console.WriteLine(f.SomeProperty);
}

class Foo
{
public int SomeProperty {get;set;}
}

当然,您需要对其进行调整以满足您的需求,哪些部分是可变的,哪些不是,等等,但它展示了总体思路。

关于c# - 带有表达式树的复杂构建器方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11441191/

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