【问题标题】:transform a lambda expression转换 lambda 表达式
【发布时间】:2010-08-07 10:39:21
【问题描述】:

我有以下代码

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

并想将其转换为

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

PersistentAttributeInfo 只在运行时才知道

有可能吗?

【问题讨论】:

    标签: c# linq lambda expression


    【解决方案1】:

    如果 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(当然是无类型的)。​​

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      相关资源
      最近更新 更多