给定以下类型:
class Parent { List<Child> Children {get;set;}}
class Child {List<Child> GrandChildren {get;set;}}
class Helper<TEntity> {List<string> Properties {get;set;}}
并在 Helper 上给出以下方法...
public Helper AddProps<TEntity, TProp>(Expression<Func<TEntity, TProp>> exp)
{
this.Properties.Add(GetPropInfo(exp).Name);
}
public PropertyInfo GetPropInfo(Expression<Func<TEntity, TProp>> exp)
{
return (PropertyInfo)((MemberExpression)(expression.Body)).Member;
}
我能够做到这一点:
Helper<Parent> myHelper = new Helper<Parent>();
myHelper.AddProps(x => x.Children);
myHelper 上的字符串列表“Properties”将包含值“Children”,即通过表达式传递的属性名称。
我现在想做的是能够实现同样的事情,只是具有反映类型层次结构的能力。
会是这样吗?
x => x.Children { xx => xx.GrandChildren }
或者甚至有可能,会涉及什么?我以前见过嵌套的 lambda,但不知道其中涉及什么。
提前致谢!
编辑
似乎有些混乱,所以我会尽力澄清。我希望能够使用 lambda 表达式和方法链接创建一个看起来像“Object.SubObject.SubSubObject”的字符串。我的示例执行此操作,但仅针对一个深度级别(类的属性)。我想做的是将其扩展到任何深度。
例如,我想使用带有流畅界面的 lambda 表达式,看起来像这样......
AddProps(x => x.Children).AddProps(xx => xx.GrandChildren) 这会将“Children.GrandChildren”添加到我的“Properties”字符串列表中。