我有一个包含属性的父项和子项:
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; }
}
我有一个函数,它使用一般函数列表来设置值:
foreach (Func<T, object> function in functions)
{
function.Invoke(Parent);
}
这些功能填充如下:
public Func<T, object>[] functions { get; set; }
this.functions = FunctionsToArray<Parent>(x => x.IsValid = true,
x.Child.IsValid = true);
供参考:
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);
建议/意见/任何事情都将不胜感激。
答案 0 :(得分:1)
首先,我认为您实际上打算使用Action<Parent>
而不是Func<Parent, object>
,因为您的示例lamba表达式实际上都没有返回任何内容。如果是这种情况那么你只需要一个lambda表达式来迭代列表并设置值,这可以通过常规foreach
x => { foreach(var cli in x.ChildList) cli.IsValid = true; }
或者由于该集合是List
,您可以使用它的ForEach
方法
x => x.ChildList.ForEach(cli => cli.IsValid = true)
你甚至可以创建一个可以完成所有三个
的lambdax =>
{
x.IsValid = true;
x.Child.IsValud = true;
foreach(var cli in x.ChildLIst)
cli.IsValid = true;
}
答案 1 :(得分:0)
你可以这样做:
x => x.ChildList.ForEach(childListItem => childListItem.IsValid = true)