gpt4 book ai didi

c# - 转换 lambda 表达式

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

我有以下代码

Expression<Func<IPersistentAttributeInfo, bool>> expression = info => info.Owner== null;

并想将其转换为

Expression<Func<PersistentAttributeInfo, bool>> expression = info => info.Owner== null;

PersistentAttributeInfo 仅在运行时才知道

这可能吗?

最佳答案

如果 PersistentAttributeInfo 仅在运行时已知,您显然不能静态编写 lambda 并让编译器为您完成繁重的工作。您必须从头开始创建一个新的:

Type persistentAttributeInfoType = [TypeYouKnowAtRuntime];
ParameterExpression parameter = Expression.Parameter(persistentAttributeInfoType, "info");
LambdaExpression lambda = Expression.Lambda(
typeof(Func<,>).MakeGenericType(persistentAttributeInfoType, typeof(bool)),
Expression.Equal(Expression.Property(parameter, "Owner"), Expression.Constant(null)),
parameter);

您可以调用 lambda.Compile() 来返回一个与示例中转换后的 lambda 表达式类似的委托(delegate)(尽管当然是非类型化的)。

关于c# - 转换 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3430114/

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