У меня есть класс, который я пытаюсь использовать из Powershell. У этого класса есть метод, называемый Execute()
, с двумя перегрузками: один, который принимает Func<T>
и тот, который принимает Action<T>
. Я могу вызвать перегрузку, которая принимает Action<T>
с использованием ScriptBlock в качестве делегата, но я не могу понять, как вызвать перегрузку, которая принимает Func<T>
:Powershell создает скриптблока для Func <T> вместо Action <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
Как вызвать перегрузку, которая принимает Func<T>
? Я предполагаю, что для этого потребуется создать ScriptBlock с типом возврата, но я не знаю, как это сделать; анализатор Powershell, по-видимому, недостаточно умен, чтобы сделать это автоматически.
'Execute ([Func [INT]] {1 + 1})' – PetSerAl
Это работает ... сделать это и ответить, и я 'll выберите его – Mark