C# 如何从包含列表的类中删除列表的元素?
我有一个包含ParentDetail列表的类Parent。课程很好,但现在我需要提供 一种方法,用于删除以ParentDetail.Text作为空字符串的任何ParentDetail对象 有没有一种简单的方法可以通过向父类添加另一个方法来实现这一点C# 如何从包含列表的类中删除列表的元素?,c#,C#,我有一个包含ParentDetail列表的类Parent。课程很好,但现在我需要提供 一种方法,用于删除以ParentDetail.Text作为空字符串的任何ParentDetail对象 有没有一种简单的方法可以通过向父类添加另一个方法来实现这一点 public class Parent { public IList<ParentDetail> ParentDetails { get { return _ParentDetails; }
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; }
}
公共类父类{
公共图书馆的详细信息{
获取{return\u ParentDetails;}
}
私有列表_ParentDetails=新列表();
公共家长(){
这是。_ParentDetails=new List();
}
}
公共类ParentDetail{
公共ParentDetail(){
this.Text=新的HtmlText();
}
公共HtmlText文本{get;set;}
}
公共类HtmlText{
公共HtmlText(){
TextWithHtml=String.Empty;
}
[allowtml]
公共字符串TextWithHtml{get;set;}
}
您还可以让它更通用一些:
public void RemoveChildren( Predicate<Child> match )
{
_parentDetail.RemoveAll (match);
}
我还要向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.Text == null || String.IsNullOrEmpty(x.Text.TextWithHtml));
Parent p = new Parent();
p.RemoveAll (x => x.IsEmpty);
Marc的答案是明确的(我喜欢),但如果您想要更大的灵活性,使用Func参数更灵活。除非有充分的理由允许使用空节点,否则我建议您在输入数据之前在填充列表的代码中过滤数据。使用这种方法会污染您的公共界面,并为用户引入了一个可以避免的额外步骤。非常感谢。我没想到会有这么简单的解决办法。回答得很好。我会回答马克的。
Parent p = new Parent();
p.RemoveAll (x => x.IsEmpty);