gpt4 book ai didi

c# - 转换 Expression.Property 结果

转载 作者:行者123 更新时间:2023-11-30 14:14:34 25 4
gpt4 key购买 nike

如何在创建 Expression 时创建类型转换动态树?

问题是,我有一个 string 类型的属性:

public class Test
{
public string Id { get; set; }
}

我想创建一个强类型的 lambda 表达式来表示一个返回 object 的委托(delegate)。而不是 string (Expression<Func<T, object>>)。

现在我正在这样做:

private static Expression<Func<T, object>> CreateIdQuery()
{
Type type = typeof(T);
PropertyInfo idProperty = type.GetProperty("Id");
ParameterExpression lambdaParam = Expression.Parameter(type, "x");
MemberExpression body = Expression.Property(lambdaParam, idProperty);
LambdaExpression expr = Expression.Lambda(body, lambdaParam);
return (Expression<Func<T, object>>)expr;
}

但它在最后一行抛出异常(我无法将 Expression<Func<Test, string>> 转换为 Expression<Func<Test, object>> )。

我如何转换表达式的主体(我假设 MemberExpression 部分需要转换为 object)?

最佳答案

使用Expression.Convert(body, typeof(object)) .

private static Expression<Func<T, object>> CreateIdQuery()
{
Type type = typeof(T);
PropertyInfo idProperty = type.GetProperty("Id");
ParameterExpression lambdaParam = Expression.Parameter(type, "x");
MemberExpression body = Expression.Property(lambdaParam, idProperty);
UnaryExpression converted = Expression.Convert(body, typeof(object));
LambdaExpression expr = Expression.Lambda(converted, lambdaParam);
return (Expression<Func<T, object>>)expr;
}

关于c# - 转换 Expression.Property 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11779519/

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