我有一个包含ParentDetail列表的Parent类。这个课程很好,但现在我需要提供 将删除任何将ParentDetail.Text作为空字符串的ParentDetail对象的方法。
有没有一种简单的方法可以通过向Parent类添加另一个方法来实现这一点?
public class Parent {
public IList<ParentDetail> ParentDetails {
get { return _ParentDetails; }
}
private List<ParentDetail> _ParentDetails = new List<ParentDetail>();
public Parent() {
this._ParentDetails = new List<ParentDetail>();
}
}
public class ParentDetail {
public ParentDetail() {
this.Text = new HtmlText();
}
public HtmlText Text { get; set; }
}
public class HtmlText {
public HtmlText() {
TextWithHtml = String.Empty;
}
[AllowHtml]
public string TextWithHtml { get; set; }
}
答案 0 :(得分:11)
public void RemoveEmptyChildren() {
_ParentDetail.RemoveAll(
x => x.Text == null ||
string.IsNullOrEmpty(x.Text.TextWithHtml));
}
答案 1 :(得分:1)
您还可以使它更通用:
public void RemoveChildren( Predicate<Child> match )
{
_parentDetail.RemoveAll (match);
}
然后,您可以像这样使用它:
Parent p = new Parent();
p.RemoveAll (x => x.Text == null || String.IsNullOrEmpty(x.Text.TextWithHtml));
我还要为ParentDetail添加一个额外的属性:IsEmpty
public class ParentDetail
{
public HtmlText Text {get; set;}
public bool IsEmpty
{
return this.Text == null || String.IsNullOrEmpty(this.Text.TextWithHtml);
}
}
然后,您的代码可以简化为:
Parent p = new Parent();
p.RemoveAll (x => x.IsEmpty);
Marc的回答是明确的(我喜欢),但如果你想要更多的灵活性,使用Func参数会更灵活。