Powershell 为 Func<T> 而不是 Action<T> 创建脚本块

Powershell create scriptblock for Func<T> instead of Action<T>

我有一个 class 我正在尝试从 Powershell 使用。这个 class 有一个方法,称为 Execute(),有两个重载:一个接受 Func<T> 和一个接受 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> 的重载?我假设这需要创建一个具有 return 类型的 ScriptBlock,但我不知道该怎么做; Powershell 解析器显然不够智能,无法自动执行此操作。

您需要自己将ScriptBlock转换为正确的委托类型:

$t.Execute([Func[int]]{ 1 + 1 })