我有一个类正试图从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 })