4

Powershell から使用しようとしているクラスがあります。このクラスには というメソッドがあり、Execute()2 つのオーバーロードがあります。1 つは を受け取り、Func<T>もう 1 つは を受け取りますAction<T>Action<T>スクリプト ブロックをデリゲートとして使用するオーバーロードを呼び出すことはできますが、次のようなオーバーロードを呼び出す方法がわかりませんFunc<T>

add-type -TypeDefinition @'
using System;

public class DelegTest
{
    public R Execute<R>(Func<R> method)
    {
        return method();
    }

    public void Execute(Action method)
    {
        Execute(() => { method(); return true; });
    }
}
'@

$t = new-object DelegTest
$t.Execute({ 1 + 1 }) # returns nothing

を受け取るオーバーロードを呼び出すにはどうすればよいFunc<T>ですか? これには、戻り値の型を持つ ScriptBlock を作成する必要があると思いますが、これを行う方法がわかりません。Powershell パーサーは、これを自動的に実行できるほどスマートではないようです。

4

1 に答える 1