2011-06-19 20 views
4

私はParentDetailのリストを含むParentクラスを持っています。クラスは正常に動作しますが、空の文字列としてParentDetail.Textを持つParentDetailオブジェクトを削除するメソッドを に提供する必要があります。Listを含むクラスからListの要素を削除するにはどうすればよいですか?

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

空ノードを許可する理由がない限り、リストに入力するコードに入力する前にデータをフィルタリングすることをお勧めします。このようなメソッドを作ると、あなたのパブリックインターフェイスが汚染され、ユーザーのために余分なステップが導入されることがあります。 –

答えて

11
public void RemoveEmptyChildren() { 
    _ParentDetail.RemoveAll(
     x => x.Text == null || 
     string.IsNullOrEmpty(x.Text.TextWithHtml)); 
} 
+0

ありがとうございます。私はそのような単純な解決策を期待していませんでした。素晴らしい答え。私は答えをマークします。 – UCC

1

ます。また、それはもう少し汎用的にすることができます:私も余分に追加します

Parent p = new Parent(); 
p.RemoveAll (x => x.Text == null || String.IsNullOrEmpty(x.Text.TextWithHtml)); 

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.IsEmpty); 

マルクの答えは(私が好きなもの)、明示的であるが、あなたはより多くの柔軟性をしたい場合は、のFunc引数を使用すると、より柔軟です。

関連する問題