4

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.

Mark
  • 11,257
  • 11
  • 61
  • 97

1 Answers1

8

You need to cast ScriptBlock to right delegate type by yourself:

$t.Execute([Func[int]]{ 1 + 1 })
user4003407
  • 21,204
  • 4
  • 50
  • 60