2012-02-02 9 views
1

リスト内でRangeクラスを使用するのが最も一般的な場合は、Listクラスを継承し、パーサアルゴリズムをコンストラクタに移動することをお勧めしますか?相続で継承を使用してコレクションクラスにリストをラップするのは良い方法ですか?

public class RangeParser 
{ 
    public static IList<Range<int>> Parser(string range) 
    { 
     // parse the string and return a new list 
    } 
} 

public class RestrictionsFoo 
    { 
    public static ICriterion BetweenRanges<T>(IList<Range<T>> ranges, string propertyName) 
     { 
      var disjunction = Restrictions.Disjunction(); 
      foreach (Range<T> range in ranges) 
       disjunction.Add(Restrictions.Between(propertyName, range.De, range.Ate)); 

      return disjunction; 
     } 
} 

public class Range<T> 
{ 
    public T From { get; set; } 
    public T To { get; set; } 
} 
継承なし

public class RangeCollection<T> : List<Range<T>> 
{ 
    public RangeCollection<T>(string range) 
    { 
     // parse the string and load this collection 
    } 
} 

public class RestrictionsFoo 
    { 
    public static ICriterion BetweenRanges<T>(RangeCollection<T> ranges, string propertyName) 
     { 
      var disjunction = Restrictions.Disjunction(); 
      foreach (var range in ranges) 
       disjunction.Add(Restrictions.Between(propertyName, range.De, range.Ate)); 

      return disjunction; 
     } 
} 

答えて

1

最も簡単な解決策は、それはそうです、右の範囲< T>で静的Parseメソッドを持っている、あなたを提供文字列からTを解析することができます。そのために私はTypeConverterの施設を利用します

関連する問題