[英]How can I remove elements of a List from a class containing the List?
我有一个包含ParentDetail列表的Parent类。 该类工作正常,但现在我需要提供一个方法,将删除任何ParentDetail对象,其中ParentDetail.Text为空字符串。
有没有一种简单的方法可以通过向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; }
}
public void RemoveEmptyChildren() {
_ParentDetail.RemoveAll(
x => x.Text == null ||
string.IsNullOrEmpty(x.Text.TextWithHtml));
}
您还可以使它更通用:
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参数会更灵活。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.