C# 如何判断表达式是否为<;Func<;T、 对象>&燃气轮机;是指根属性,还是指属性的属性?
我有:C# 如何判断表达式是否为<;Func<;T、 对象>&燃气轮机;是指根属性,还是指属性的属性?,c#,expression-trees,C#,Expression Trees,我有: Expression someExpression=c=>c.KittenName 我用它来设置KittenName的值 如果类型是嵌套的,我需要以不同的方式处理它,例如 Expression someExpression=c=>c.Address.StreetName 如何从StreetName到Address“沿着树走”,和/或检测表达式是否为嵌套表达式?这不是嵌套类型-嵌套类型是类型声明本身嵌套在另一个类型中的位置。这只是一个属性表达式与另一个属性表达式之间的关系。。。您可以通过查
Expression someExpression=c=>c.KittenName
我用它来设置KittenName
的值
如果类型是嵌套的,我需要以不同的方式处理它,例如
Expression someExpression=c=>c.Address.StreetName
如何从StreetName到Address“沿着树走”,和/或检测表达式是否为嵌套表达式?这不是嵌套类型-嵌套类型是类型声明本身嵌套在另一个类型中的位置。这只是一个属性表达式与另一个属性表达式之间的关系。。。您可以通过查看
MemberExpression
的目标来检测它,该目标将是另一个MemberExpression
,而不是参数expression
。您能解释一下如何做到这一点吗?我将expression.body作为MemberExpression获取,但我无法判断它是“root”属性还是属性的属性。如果我试图设置属性,但它不是“root”属性,它将设置c.StreetName
而不是c.Address.StreetName
,正如我所说,您需要查看MemberExpression
的目标,因此使用MemberExpression.Expression
并查看这是否是另一个MemberExpression
,或者它是否是参数表达式
。但从根本上说,使用它来设置值在我看来是个坏主意。如果你想要一个设置属性的表达式,你应该使用表达式。否则,您很容易发现表达式表示只读属性;var isKitten=me.Expression.Type==typeof(Kitten)代码>?谢谢,这似乎有效。我很想知道为什么您必须检查表达式
的表达式
,但也许我需要更详细地了解表达式树教程。