Я пытаюсь вызвать функцию из dll С# через powershell, для этого требуется массив объектов в качестве параметра, и мне нужно передать строки внутри него, но я не знаю, как это сделать.
Что я должен сделать:
С# версия:
printCustom(new object[] {new string[] {"hello", "its", "working"}});
Мне нужно вызвать эту функцию из powershell, но как передать параметры?
printCustom([object[]]@(//now?//));
Благодарю.
printCustom
статично
Используйте оператор унарного массива ,
, чтобы обернуть перечислимый тип в массив — это предотвратит распутывание массива строк PowerShell, когда вы затем создадите массив, который фактически будет передан методу:
[TargetType]::printCustom(@(,'hello its working'.Split()))
Давайте проверим это:
# Generate test function that takes an array and expects it to contain string arrays
Add-Type @'
using System;
public class TestPrintCustom
{
public static void printCustom(object[] args)
{
foreach(var arg in args){
foreach(string s in (string[])arg){
Console.WriteLine(s);
}
}
}
}
'@
[TestPrintCustom]::printCustom(@(,"hello its working".Split()))
Который, как и ожидалось, печатает:
hello
its
working
ну, это как-то странно, я пробую ваш способ, но, видимо, функции больше не вызываются, без ошибок..
@ root823746374 Не могли бы вы обновить свой вопрос определением метода printCustom
?
Итак, я нашел способ заставить его работать. Решение заключалось в том, чтобы добавить [object[]] перед созданием массива. Итак: ([object[]]@(,'hello its working'.Split()))
Просто чтобы знать, если я хочу передать строки без использования одной строки, а затем разделить(), как мне это сделать?
$stringArray = 'a','b','c' -as [string[]]; [TargetType]::printCustom(@(,$stringArray))
Так нельзя ли сделать это в режиме реального времени?
@root823746374 конечно, это становится немного грязным/нечитаемым: [TestPrintCustom]::printCustom(@(,[string[]]@('a','b','c')))
Является ли
printCustom
статическим или экземплярным методом?