在 Powershell 6 中传递 System.Text.RegularExpressions.Regex 作为函数参数
Pass a System.Text.RegularExpressions.Regex as function parameter in Powershell 6
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
所以现在我很困惑为什么它在基础类型匹配时抱怨强制转换...
有人可以指出我做错了什么吗?
下面的命令行对我有用,并提供了一些相关的输出。你能提供一个完整的例子吗?
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
尝试使用最后显示的语法。
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
所以现在我很困惑为什么它在基础类型匹配时抱怨强制转换...
有人可以指出我做错了什么吗?
下面的命令行对我有用,并提供了一些相关的输出。你能提供一个完整的例子吗?
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
尝试使用最后显示的语法。