简体   繁体   中英

How can I pass a PowerShell function to a .NET method that takes a Func<T1, T2>?

I need to create a .NET object in PowerShell. The signature for the constructor is:

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

and the class is defined as:

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

The first parameter is easy enough. I'm stumped on the second. How can I pass a PowerShell function as Func<T1, T2> ?

UPDATED

The syntax supplied by Jason wasn't quiet correct. This works:

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

I was also missing the $args[0] as a parameter in my scriptblock/delegate. This is what I should've had:

$functionToCall = { Get-Blah $args[0] }

PowerShell can convert a ScriptBlock to a delegate, so something like this might work fine:

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

Note that PowerShell cannot deduce generic type arguments from a ScriptBlock. In your case, ObjCTor looks like a generic class so type deduction isn't a factor, but if you were calling a generic method, things could get messy.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM