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



我有一个类正试图从Powershell中使用。这个类有一个名为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>的过载?我认为这需要创建一个具有返回类型的ScriptBlock,但我不知道如何做到这一点;Powershell解析器显然不够聪明,无法自动执行此操作。

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

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

相关内容

  • 没有找到相关文章

最新更新