2016-03-22 44 views
0

は、私はこれを実行しようとしました:メソッドを拡張メソッドの最初のパラメータとして使用できますか?

public static EventHandler ToEventHandler(this Action callback) 
{...} 

をいくつかのシンタックスシュガーのために、私はEventHandlerのためにタイプされます方法にvoid x()のような単純な方法を渡したいとき。

しかし、私はそうのようにこれを呼び出そう:

SomeMethod(x.ToEventHandler()); 

私は、コンパイラのエラーを取得:

x() is a 'method', which is not valid in the given context 

方法は、.NETで第一級オブジェクトなので、私は理由を見ることができませんこれは可能ではありません。それはなぜこれが好きではないのですか、私がやろうとしていることを達成する別の方法がありますか?

+0

このリンクをチェックするhttp://stackoverflow.com/questions/2082615/pass-method-as-parameter-using-c-sharp – rashfmnb

+0

最初に「アクション」にキャストしようとしましたか?これは、コンパイラが別の方法を知るまで、メソッドグループです。 –

答えて

0

xはメソッドであり、コンパイラは拡張メソッドを使用しているときに、その識別子によってメソッドをデリゲートに魔法にすることはできないため、これを行うことはできません(私は確かにそうすることができるはずです... )。あなたは(...パラメータなしのデリゲート)Actionを使用することを期待しながら、EventHandlerは、2つの入力パラメータがあり、一方でSomeMethod(new Action(x).ToEventHandler());

は何が必要このです。

EventHandler handler = (sender, e) => callback(); 

...このルートを使用している場合は、問題ありません。

関連する問題