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 })
我有一个 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 })