Передайте System.Text.RegularExpressions.Regex в качестве параметра функции в Powershell 6 - PullRequest
0 голосов
/ 23 ноября 2018

Здравствуйте, эксперты Powershell,

Я хочу написать функцию Powershell, которая принимает в качестве параметра System.Text.RegularExpressions.Regex.Мой заголовок функции выглядит так:

function Foo {
    Param([System.Text.RegularExpressions.Regex] $myRegex)
    # function body
}

И я попытался вызвать Foo так:

$MY_REGEX = new-object System.Text.RegularExpressions.Regex('<regex_body>')
Foo($MY_REGEX)

Я получил ошибку, которая говорит Cannot convert the "System.Object[]" value of type "System.Object[]" to type "System.Text.RegularExpressions.Regex".

Мне интересно, почему это так, поскольку я явно определил регулярное выражение с типом System.Text.RegularExpressions.Regex.Итак, я сделал .GetType () на своем объекте и получил:

BaseType                   : System.Object
UnderlyingSystemType       : System.Text.RegularExpressions.Regex
FullName                   : System.Text.RegularExpressions.Regex

Так что теперь я запутался, почему жалуюсь на приведение, когда базовый тип совпадает ...

Может кто-топодскажите пожалуйста что я делаю не так?

1 Ответ

0 голосов
/ 23 ноября 2018

Из командной строки приведенное ниже работает для меня с небольшим количеством соответствующего вывода.Можете ли вы привести полный пример.

function foo { param ( [System.Text.RegularExpressions.Regex] $myRegex ) ; process { Write-Information -MessageData $myRegex -InformationAction Continue ; $myRegEx.GetType() | fl * } }
foo a.
$r = New-Object System.Text.RegularExpressions.RegEx("a.")
foo -MyRegex $r

и выбрасывает

a.

FullName                   : System.Text.RegularExpressions.Regex

Попробуйте использовать последний показанный синтаксис.

...