如何从包含List的类中删除List的元素?

时间:2011-06-19 07:44:21

标签: c#

我有一个包含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; } 
    }

2 个答案:

答案 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参数会更灵活。