我试图将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创建委托。我一直抱怨异常抱怨方法参数为空,但我知道我传递给它的东西不是空的,所以我迷失了。
有人可以帮忙吗?
答案 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()})