У меня есть .NET API, который использует много делегатов. В моем API есть несколько методов, похожих на следующие:
public static class MyClass
{
public static void DoSomethingWithString(Func<object> myFunc)
{
string myStringValue = myFunc().ToString();
Console.WriteLine(myStringValue);
}
public static void DoSomethingWithDouble(Func<object> myFunc)
{
object unparsedValue = myFunc();
double parsedValue = Convert.ToDouble(unparsedValue);
Console.WriteLine(parsedValue);
}
}
Теперь в PowerShell у меня есть следующее:
[MyClass]::DoSomethingWithString({ "Hello" }); # No error here
[MyClass]::DoSomethingWithDouble({ 123.4 }); # InvalidCastException - can't convert a PSObject to double
Проблема в том, что мой скриптовый блок PowerShell возвращает PSObject вместо фактического двойного значения. Мой .NET API ничего не знает о PowerShell, и я не хочу добавлять ссылку на библиотеки DLL PowerShell только для того, чтобы добавить специальную обработку для этого конкретного сценария.
Есть ли способ заставить мои блоки сценариев возвращать фактические типы значений, а не PSObjects? Или есть способ, не зависящий от PowerShell, для моей библиотеки .NET для обработки PSObjects?