2012-05-08 16 views
0

ValidationMethodsというクラスにFuncのリストがあります。私はValidator.Validate(Func)に渡すことで、これらをValidatorクラスで使用します。私はIEnumerableを取り、いくつかの列挙型の値に基づいてフィルタリングするクラスを指定するためにValidateをオーバーロードできるように、各関数をラップする方法があるかどうか疑問に思っていました。定義済み関数リストの作成とフィルタリング

私は、Validatorがバリデーターを変更せずに必要に応じてより多くのバリデーションタイプを取り入れることができるオープン/クローズの原則にAPIをより厳密に従わせるためにこれを行っています。

+0

いくつかのコードをお願いします –

答えて

2

私はあなたを正しく理解していただきたいと思います。次に、各FUNCのラッパー

enum Category { 
    F1, 
    F2 
} 

IEnumerable<FWrap<t1,t2>> funcs = getFuncs(); 
validators = funcs.Where(f => f.Cat == Category.F1) 

ので:その後

class FWrap<TIn, TOut> //depending on your arities 
{ 
    public Func<TIn, TOut> Fnc {get; set;} 
    public Category Cat {get; set;} 

    //some constructor and stuff 
} 

は、どんな問題があってはならないあなたはのfuncsをフィルタリングするために列挙したいですon ...私はあなたが期待していたものです。

+2

これは良い方法ですが、単純なIDictionary <カテゴリ、Func >はどうですか? – jjrdk

+0

私はenumで辞書を索引付けすることについて考えなかった。もちろんそれはさらにエレガントです。このように、複数の基準でフィルタリングすることができます。 – phg

+0

Doh!それは私の顔を見ていたものです。両方に乾杯! – deanvmc

関連する問題