Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何判断表达式是否为<;Func<;T、 对象>&燃气轮机;是指根属性,还是指属性的属性?_C#_Expression Trees - Fatal编程技术网

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)?谢谢,这似乎有效。我很想知道为什么您必须检查
表达式
表达式
,但也许我需要更详细地了解表达式树教程。