如何向MatchEvaluator传递额外参数

28
我有一段代码长这个样子:
text = reg.Replace(text, new MatchEvaluator(MatchEvalStuff));

我需要像这样传递第二个参数:
text = reg.Replace(text, new MatchEvaluator(MatchEvalStuff, otherData));

这是否可能,以及最好的方法是什么?

2个回答

31

MatchEvaluator是一个委托,因此您无法更改其签名。您可以创建一个调用具有附加参数的方法的委托。使用lambda表达式很容易实现:

MatchEvaluator是一个委托,所以不能改变其签名。您可以创建一个调用带有额外参数的方法的委托。这可以通过使用lambda表达式很容易地完成:

text = reg.Replace(text, match => MatchEvalStuff(match, otherData));

非常感谢!我喜欢这个答案。 - Matias Cicero
1
一种基于此解决方案的替代方法是 text = Regex.Replace(text, @"some_pattern", new MatchEvaluator(match => MatchEvalStuff(match, otherData))); - Ryan Pergent
抱歉,我知道这已经过时了,但有没有人能够扩展一下这个答案并提供委托声明呢?我无法理解它。 - Jarrod McGuire

14

抱歉,我应该提到我正在使用2.0版本,所以我没有使用lambda的权限。这是我最终采取的做法:

private string MyMethod(Match match, bool param1, int param2)
{
    //Do stuff here
}

Regex reg = new Regex(@"{regex goes here}", RegexOptions.IgnoreCase);
Content = reg.Replace(Content, new MatchEvaluator(delegate(Match match) { return MyMethod(match, false, 0); }));

这样我就可以创建一个"MyMethod"方法,并传递任何我需要的参数(param1和param2仅为此示例,不是我实际使用的代码)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接