Question:
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>
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
add-type -TypeDefinition @' using System; public class DelegTest { public R Execute { 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.
Answer:
You need to cast ScriptBlock
to right delegate type by yourself:
1 2 |
$t.Execute([Func[int]]{ 1 + 1 }) |