2011-12-19 11 views
3

私はこのような宣言とメソッドを持っています。Func <object、bool>のパラメータとしてFunc <T, bool>を使用する方法?

public void OriginalMethod(Func<object,bool> selector) 

そして、私はこのような宣言を持っていること、一般的な方法から、それを呼び出すしたいと思います:

public void GenericMethod<T>(Func<T, bool> selector) 

私はそれをどのように行うのですか?

+0

実際の問題は、それのFunc です...

OriginalMethod(o => selector((T)o)); 

をしかしOriginalMethodがTに変換できないオブジェクトとメソッドを呼び出す場合、それは失敗します。もちろん

、あなたはカンニングすることができますオブジェクトに実装されていないTのメンバーを潜在的に呼び出すことができます。 OriginalMethodはオブジェクトパラメータでそれを呼び出すため、コンパイラはFunc が互換性があることを確認できません。 Tがオブジェクトのすべてのメンバーの実装を含むことが保証されているため、Func の呼び出しはTパラメータで受け入れられるため、OriginalMethodのセレクタでGenericMethodを呼び出す方法に注目してください。あなたのTセレクターがオブジェクトのメンバーを使用しているか、OriginalMethodがT由来のパラメーターのみを渡していることを確認してください。 – Elideb

答えて

6

あなたはOriginalMethodに直接selectorを渡すことはできません:それはどんなobjectを受け入れる方法を想定していますが、Func<T, bool>はタイプTのオブジェクトのみを受け入れます。

3

あなたが入力した1が渡された呼び出しをFunc<object, bool>を作成する必要があります。以上、またはMarc's answerのようなワンライナーのような

public void GenericMethod<T>(Func<T, bool> selector) 
{ 
    Func<object, bool> untypedSelector = (object obj) => selector((T)obj); 

    OriginalMethod(untypedSelector); 
} 

どちらか。

3
OriginalMethod(arg => selector((T)arg)); 
関連する問題