如何将类型委托从Powershell传递给.Net代码

时间:2015-05-01 00:10:17

标签: powershell

我试图将C#方法转换为.Net代码,我遇到了一些麻烦。这是C#行

text = Regex.Replace(text, "{{(.+?)}}", new MatchEvaluator(match => values[match.Groups[1].Value].ToString()));

我的第一次尝试是这样的:

$text = New-Object System.Text.RegularExpressions.MatchEvaluator -ArgumentList @({$values[$args[0].Groups[1].Value].ToString()})

我显然不明白如何在Powershell中创建代表,而且我在过去的一小时里一直在谷歌搜索。我遇到的一切似乎都失败了,所以我确信我对所发生的事情有一个根本的误解。我知道MatchEvaluator本身就是一个委托类型,我认为问题是我不知道如何从powershell scriptblocks创建委托。我一直抱怨异常抱怨方法参数为空,但我知道我传递给它的东西不是空的,所以我迷失了。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您可以通过强制转换为委托类型来创建委托:

$Delegate=[System.Text.RegularExpressions.MatchEvaluator]{$values[$args[0].Groups[1].Value].ToString()}

但在许多情况下,您只需将ScriptBlock传递给方法:

$text=[Regex]::Replace($text, "{{(.+?)}}", {$values[$args[0].Groups[1].Value].ToString()})