【问题标题】:Getting root of expression获取表达式的根源
【发布时间】:2013-07-28 19:14:31
【问题描述】:

让我马上给你看一些代码:

class MyClass {

    public MyClass(Customer c) {
        ExtractRoot(() => c.FirstName);
    }
}

ExtractRoot 接受 Expression<Func<object>> 作为其参数。

我正在尝试从表达式树中提取客户对象“c”。我将它传递给ExtractRoot 方法,并且我知道如何获取代表客户对象的ConstantExpression。但是,当我在该对象上调用 ToString() 时,我会打印出以下内容:
MyAssemblyName.CustomNamespace.MyClass+c__DisplayClass2

有人能解释一下这是什么意思吗?为什么我没有调用客户的ToString() 方法,就好像我得到的对象不是客户一样,为什么以及我要返回什么?

最后,我怎样才能得到实际的客户对象,或者我的表达的根?

【问题讨论】:

  • 我不确定我是否理解这个问题,你的意思是constantExpression.Value
  • () => c.FirstName 是一个无类型的委托。要到达根目录,您需要一个 c => c.FirstName 形式的委托,我认为
  • @JoachimIsaksson 正确,我一直在下降树,直到到达 ConstantExpression 然后我得到了它的价值,就像你说的那样,但我得到了我展示给你的东西?
  • 为什么投反对票!!这不是完全重复的@ErikSchierboom,因为相关答案涵盖了我的部分问题,但是如何获取实际的根对象。

标签: c# .net


【解决方案1】:

我找到了我的答案的完整解决方案,它有两个部分:

  1. 为什么 DisplayClass 及其含义可以在这个问题的答案中找到:What does “DisplayClass” name mean when calling lambda?
  2. 如何获取表达式的实际根(顺便说一句)可以在这个问题的答案中找到:Getting the object out of a MemberExpression

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多