2

我需要在 PowerShell 中创建一个 .NET 对象。构造函数的签名是:

public ObjCTor(TClient param1, Func<TClient, IInterface> param2)

该类定义为:

public class ObjCTor<TClient> : IOtherInt1, IOtherInt2 where TClient : ConcreteBase

第一个参数很简单。我被第二个难住了。如何将 PowerShell 函数传递为Func<T1, T2>

更新

4

2 回答 2

2

PowerShell 可以将 ScriptBlock 转换为委托,因此这样的事情可能会正常工作:

$sb = { param($t1) $t1 }
New-Object "ObjCTor[CClient, Func[CClient,IInterface]]" -ArgumentList $param1,$sb

请注意,PowerShell 无法从 ScriptBlock 推导出泛型类型参数。在您的情况下, ObjCTor 看起来像一个泛型类,因此类型推导不是一个因素,但如果您调用的是泛型方法,事情可能会变得混乱。

于 2013-10-21T15:14:01.530 回答
2

Jason 提供的语法并不完全正确。这有效:

$= New-Object "ObjCTor[TClient]" -ArgumentList $param1,$functionToCall

我的脚本块/委托中也缺少$args[0]作为参数。这是我应该拥有的:

$functionToCall = { Get-Blah $args[0] }
于 2013-10-27T19:54:14.847 回答