Reputation: 101
Hello Powershell Experts,
I want to write a Powershell function that takes a System.Text.RegularExpressions.Regex as a parameter. My function header goes like this:
function Foo {
Param([System.Text.RegularExpressions.Regex] $myRegex)
# function body
}
And I tried to call Foo
like this:
$MY_REGEX = new-object System.Text.RegularExpressions.Regex('<regex_body>')
Foo($MY_REGEX)
I got an error that says Cannot convert the "System.Object[]" value of type
"System.Object[]" to type "System.Text.RegularExpressions.Regex".
I'm wondered why this is since I explicitly defined the regex with System.Text.RegularExpressions.Regex
type. So I did .GetType() on my object and I got:
BaseType : System.Object
UnderlyingSystemType : System.Text.RegularExpressions.Regex
FullName : System.Text.RegularExpressions.Regex
So now I'm confused why it's complaining about casting when the underlying type matches...
Can someone please point out what I'm doing wrong?
Upvotes: 0
Views: 639
Reputation: 8346
From the command line the below works for me with a bit of the relevant output provided. Can you provide an full example.
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
and emits
a.
FullName : System.Text.RegularExpressions.Regex
Try using the last syntax shown.
Upvotes: 1