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

时间:2016-05-10 18:49:54

标签: c# powershell overloading scriptblock

我有一个我试图从Powershell使用的课程。这个类有一个名为Execute()的方法,有两个重载:一个带Func<T>,另一个带Action<T>。我可以使用scriptblock作为委托来调用带有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解析器显然不够智能,无法自动执行此操作。

1 个答案:

答案 0 :(得分:4)

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

 if ! lsof $f
    find ...
 fi