2017-01-05 4 views
2

を使用して、子リスト内の項目のプロパティを設定:私は性質を持っている親と子のアイテムを持っているのFunc <T, object>

public class Parent 
{ 
    public bool IsValid { get; set; } 
    public Child ChildItem { get; set; } 
    public List<ChildListItem> ChildList { get; set; } 
} 

public class ChildItem 
{ 
    public bool IsValid { get; set; } 
} 

public class ChildListItem 
{ 
    public bool IsValid { get; set; } 
} 

私は値を設定する機能の一般的なリストを取り機能を持っています参考のため

public Func<T, object>[] functions { get; set; } 

this.functions = FunctionsToArray<Parent>(x => x.IsValid = true, 
               x.Child.IsValid = true); 

foreach (Func<T, object> function in functions) 
{ 
    function.Invoke(Parent); 
} 

機能が同様に読み込まれます。私がやりたいのは何

public static Func<T, object>[] FunctionsToArray<T>(params Func<T, object>[] functions) 
{ 
    return functions.ToArray(); 
} 

は、子リストの各項目を設定することで、何かのように:

this.functions = FunctionsToArray<Parent>(x => x.IsValid = true, 
               x.Child.IsValid = true, 
               x.ChildList.<something>.IsValid = true); 

提案/コメント/何をいただければ幸いです。

答えて

1

まず、Func<Parent, object>の代わりにAction<Parent>を使用することを実際に考えていたと思います。例のlamba式が実際に何も返さないからです。その場合は、あなただけのリストを反復処理し、値を設定しますラムダ式を必要とし、それは通常のforeach

x => { foreach(var cli in x.ChildList) cli.IsValid = true; } 

またはコレクションは、あなたはそれがForEach方法だ使用することができますListされているためで行うことができます

x => x.ChildList.ForEach(cli => cli.IsValid = true) 

あなたも、3つのすべての

x => 
{ 
    x.IsValid = true; 
    x.Child.IsValud = true; 
    foreach(var cli in x.ChildLIst) 
     cli.IsValid = true; 
} 
+0

恐ろしい、ちょうど私が欲しい、そしてはいアクション対Funcより適切です。 –

0

あなたを行います単一のラムダを作成することができますできます:

x => x.ChildList.ForEach(childListItem => childListItem.IsValid = true) 
関連する問題