I have a class I'm attempting to use from Powershell. This class has a method, called Execute()
, with two overloads: one which takes a Func<T>
and one which takes an Action<T>
. I can call the overload that takes an Action<T>
using a scriptblock as the delegate, but I cannot figure out how to call the overload that takes 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
How do I call the overload that takes a Func<T>
? I assume this would require creating a ScriptBlock that has a return type, but I don't know how to do this; the Powershell parser apparently isn't smart enough to do this automatically.
You need to cast ScriptBlock
to right delegate type by yourself:
$t.Execute([Func[int]]{ 1 + 1 })
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With