【问题标题】:How to split an Expression that creates anonymous types in C#如何拆分在 C# 中创建匿名类型的表达式
【发布时间】:2014-09-17 23:00:43
【问题描述】:

我在 C# 中有一个表达式

abc => new { abc.x, abc.y }

我想把它分解成

abc => abc.x
abc => abc.y
...

所以我可以遍历每个参数。 有人对此有所了解吗?

【问题讨论】:

  • 上下文是什么? “分解”是什么意思?
  • 类似foreach (var arg in ((NewExpression)myExpr.Body).Arguments)?
  • 如果您要询问如何返回多个项目而不是单个项目,请查看 SelectMany()

标签: c# lambda expression linq-expressions


【解决方案1】:

匿名声明只是匿名类型generated at compile time的抽象。

您将无法像您描述的那样即时生成它们。

【讨论】:

  • 好吧,您可以将它们视为对委托的抽象,它可以简单地指向生成的类上的生成方法。
  • 但问题并没有问如何在运行时生成新的匿名类型。
【解决方案2】:

我不知道你为什么要这样做,但 mellamokb 评论显示了方向。整个方法可能如下所示:

IEnumerable<Expression> GetExpressions<TParam, TResult>(
    Expression<Func<TParam, TResult>> expression)
{
    return ((NewExpression)expression.Body).Arguments
        .Select(a => Expression.Lambda(a, expression.Parameters.Single()));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-11
    • 2011-04-14
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多