0

您好 Powershell 专家,

我想编写一个以 System.Text.RegularExpressions.Regex 作为参数的 Powershell 函数。我的函数头是这样的:

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

所以现在我很困惑为什么当底层类型匹配时它会抱怨强制转换......

有人可以指出我做错了什么吗?

4

1 回答 1

1

在命令行中,以下内容对我有用,并提供了一些相关输出。你能提供一个完整的例子。

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

尝试使用最后显示的语法。

于 2018-11-23T15:32:11.683 回答