gpt4 book ai didi

c# - 如何从 MemberExpression 创建 lambda 表达式

转载 作者:太空狗 更新时间:2023-10-29 23:20:11 27 4
gpt4 key购买 nike

我的最终目标是遍历 lambda 表达式中的嵌套属性并确定是否有任何属性为 null,但我无法基于成员表达式创建新的 lambda 表达式。

采用这个虚拟方法:

public static void DoStuff<TModelDetail, TValue>(Expression<Func<TModelDetail, TValue>> expr, TModelDetail detail)
{
var memberExpression = expr.Body as MemberExpression;
if (memberExpression == null && expr.Body is UnaryExpression)
{
memberExpression = ((UnaryExpression)expr.Body).Operand as MemberExpression;
}

var pe = Expression.Parameter(typeof(TModelDetail), "x");
var convert = Expression.Convert(memberExpression, typeof(object));
var wee = Expression.Lambda<Func<TModelDetail, object>>(convert, pe);
var hey = wee.Compile()(detail);
}

在 Compile.exec 行我收到以下错误:

variable 'x' of type 'Blah' referenced from scope '', but it is not defined

其中 Blah 是 TModelDetail 的类型。

如何使用 MemberExpression 构建 lambda?我最终想做的是递归地找到根成员表达式,判断它是否为空,然后冒泡并判断后面的每个成员表达式是否为空。

最佳答案

expr 已经包含一个参数(我们称它为 y),它由您的成员表达式绑定(bind),所以 expr 看起来像 y => y.Member.Something.

当你构造新的 lambda 表达式 wee 时,你给它一个新参数 x,所以 wee 看起来像 x = > y.Member,这没有意义。

因此您需要为 wee 重用 expr 中的参数。

关于c# - 如何从 MemberExpression 创建 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47826936/

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