4

我有一个试图从 Powershell 使用的类。这个类有一个方法,叫做Execute(),有两个重载:一个接受 a Func<T>,一个接受 a Action<T>。我可以调用Action<T>使用脚本块作为委托的重载,但我不知道如何调用采用 a 的重载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

如何调用需要 a 的重载Func<T>?我认为这需要创建一个具有返回类型的 ScriptBlock,但我不知道该怎么做;Powershell 解析器显然不够聪明,无法自动执行此操作。

4

1 回答 1

8

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

$t.Execute([Func[int]]{ 1 + 1 })
于 2016-05-10T19:30:11.480 回答