Массив строк внутри массива объектов в Powershell

Я пытаюсь вызвать функцию из dll С# через powershell, для этого требуется массив объектов в качестве параметра, и мне нужно передать строки внутри него, но я не знаю, как это сделать.

Что я должен сделать:

С# версия:

printCustom(new object[] {new string[] {"hello", "its", "working"}});

Мне нужно вызвать эту функцию из powershell, но как передать параметры?

printCustom([object[]]@(//now?//));

Благодарю.

Является ли printCustom статическим или экземплярным методом?

Mathias R. Jessen 16.03.2022 11:59
printCustom статично
root823746374 16.03.2022 11:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте оператор унарного массива ,, чтобы обернуть перечислимый тип в массив — это предотвратит распутывание массива строк 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 16.03.2022 12:10

@ root823746374 Не могли бы вы обновить свой вопрос определением метода printCustom?

Mathias R. Jessen 16.03.2022 12:17

Итак, я нашел способ заставить его работать. Решение заключалось в том, чтобы добавить [object[]] перед созданием массива. Итак: ([object[]]@(,'hello its working'.Split()))

root823746374 16.03.2022 12:17

Просто чтобы знать, если я хочу передать строки без использования одной строки, а затем разделить(), как мне это сделать?

root823746374 16.03.2022 12:24
$stringArray = 'a','b','c' -as [string[]]; [TargetType]::printCustom(@(,$stringArray))
Mathias R. Jessen 16.03.2022 12:26

Так нельзя ли сделать это в режиме реального времени?

root823746374 16.03.2022 12:28

@root823746374 конечно, это становится немного грязным/нечитаемым: [TestPrintCustom]::printCustom(@(,[string[]]@('a','b','c')))

Mathias R. Jessen 16.03.2022 12:29

Другие вопросы по теме