次のタイプが与えられます:
class Parent { List<Child> Children {get;set;}}
class Child {List<Child> GrandChildren {get;set;}}
class Helper<TEntity> {List<string> Properties {get;set;}}
そして、ヘルパーで次のメソッドが与えられます...
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 }
それともそれは可能であり、何が関係するのでしょうか?以前にネストされたラムダを見たことがありますが、何が関係しているのかわかりません。
前もって感謝します!
編集
少し混乱しているようですので、はっきりさせておきます。ラムダ式とメソッドチェーンを使用して、この「Object.SubObject.SubSubObject」のような文字列を作成できるようにしたいと思います。私の例ではこれを行っていますが、1レベルの深さ(クラスのプロパティ)のみです。私がやりたいのは、これを拡張して任意の深さまで拡張することです。
たとえば、次のような流暢なインターフェイスでラムダ式を使用したいと思います。
AddProps(x => x.Children).AddProps(xx => xx.GrandChildren)を実行すると、「プロパティ」文字列リストに「Children.GrandChildren」が追加されます。