Преобразовать строку в тип данных для хранения в хэш-таблице - PullRequest
1 голос
/ 02 июля 2019

У меня есть что-то вроде этого в моем коде:

 [MVPSI.JAMS.CredentialRights]::Submit

Я бы хотел иметь возможность абстрагировать его, чтобы я мог настолько эффективно изменять его части, что я хочу, чтобы это была строка:

$typeName = "MVPSI.JAMS.CredentialRights"
$function = "Submit"

Однако я не могу тогда сделать это:

$typeName::$function

Как мне это сделать? Честно говоря, я даже не знаю, как эти специальные [] и :: называются в .Net \ PowerShell.

Ответы [ 2 ]

7 голосов
/ 02 июля 2019

Я даже не знаю, как называются эти специальные [] и :: в .Net \ PowerShell

  • [...] ограничивает литерал типа ; например [MVPSI.JAMS.CredentialRights]

  • :: осуществляет доступ к статическим членам типа .

Обратите внимание, что обе эти синтаксические формы относятся к PowerShell .

Альтернативой использованию литерала типа является приведение имени типа (строки) к [type]:

# The type name as a string.
$typeName = 'MVPSI.JAMS.CredentialRights'

# Get a reference to the type by its name.
$type = [type] $typeName

# The name of the static method to call.
$function = 'Submit'

# Call the static method on the type by its name.
# Note: Omitting '()' will output the method *signature*, including
#       its overloads.
$type::$function()
2 голосов
/ 02 июля 2019

Не используйте кавычки вокруг $ typeName, потому что вы определяете строку, а не ссылаетесь на класс MVPSI.JAMS.CredentialRights.Вместо этого используйте скобки.

$typeName = [MVPSI.JAMS.CredentialRights]
$function = "Submit"
$typeName::$function()

Я считаю, что :: является статическим вызовом функции в данном классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...