【发布时间】: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,因为相关答案涵盖了我的部分问题,但是如何获取实际的根对象。