2

これはおそらくばかげた質問ですが、ページの構文をもう少し読みやすくするために使用する方法があります

    public void Do(Delegate method, DispatcherPriority priority = DispatcherPriority.Normal)
    {
        this.Window.Dispatcher.BeginInvoke(method, DispatcherPriority.Background);
    }

それから私は書くことができます

        Do(new Action(() =>
        {
            //DoStuff()
        }));

ただし、アクションを Do メソッドに移動して、さらに簡単に記述できるようにしたいと思います。

        Do(() =>
        {
            //DoStuff()
        }));

しかし、Do メソッドを実行するために反変パラメーターを記述する方法は少しわかりますか?

4

1 に答える 1

4

ラムダは型指定されていないため、これは不可能です。

メソッドの引数を気にしない場合は、メソッドのシグネチャを次のように変更してください。

public void Do(Action method,
               DispatcherPriority priority = DispatcherPriority.Normal)

次に、コンパイラが暗黙的にラムダを に変換できるため、2 番目のサンプルは正常に動作しActionます。

引数を取らないメソッドを表すデリゲート型のインスタンスを本当に受け入れたい場合は、現在持っているものに固執する必要があります。

于 2010-12-20T12:05:18.947 に答える