我有一些看起来像这样的代码:
text = reg.Replace(text, new MatchEvaluator(MatchEvalStuff));
我需要传递第二个参数:
text = reg.Replace(text, new MatchEvaluator(MatchEvalStuff, otherData));
这可能吗,最好的方法是什么?
答案 0 :(得分:25)
MatchEvaluator是一个委托,因此您无法更改其签名。您可以创建一个使用附加参数调用方法的委托。使用lambda表达式非常容易:
text = reg.Replace(text, match => MatchEvalStuff(match, otherData));
答案 1 :(得分:13)
抱歉,我应该提到我使用的是2.0,所以我无法访问lambdas。这是我最终做的事情:
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仅用于本例,而不是我实际使用的代码)。