gpt4 book ai didi

c# - 如何动态分配 lambda> 到 expression

转载 作者:太空宇宙 更新时间:2023-11-03 13:45:24 24 4
gpt4 key购买 nike

我正在尝试制作动态表达式并将 lambda 分配给它。结果,我得到了异常:System.ArgumentException:“Test.ItsTrue”类型的表达式不能用于分配类型“System.Linq.Expressions.Expression`1[Test.ItsTrue]”

怎么了?

public delegate bool ItsTrue();

public class Sample
{
public Expression<ItsTrue> ItsTrue { get; set; }
}

[TestClass]
public class MyTest
{
[TestMethod]
public void TestPropertySetWithExpressionOfDelegate()
{
Expression<ItsTrue> itsTrue = () => true;

// this works at compile time
new Sample().ItsTrue = itsTrue;

// this does not work ad runtime
var new_ = Expression.New(typeof (Sample));

var result = Expression.Assign(
Expression.Property(new_, typeof (Sample).GetProperties()[0]),
itsTrue);
}
}

最佳答案

Expression.Assign 的第二个参数是表示要分配的值的表达式。因此,目前您正在有效地尝试将 ItsTrue 分配给该属性。您需要包装它,使其成为返回值 itsTrue 的表达式...通过 Expression.QuoteExpression.Constant。例如:

var result = Expression.Assign(
Expression.Property(new_, typeof (Sample).GetProperties()[0]),
Expression.Constant(itsTrue, typeof(Expression<ItsTrue>)));

或者,您可能想要Expression.Quote - 这实际上取决于您要实现的目标。

关于c# - 如何动态分配 lambda<expression<delegate>> 到 expression<delegate>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15535820/

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