次のようなコードが少しあります。
text = reg.Replace(text, new MatchEvaluator(MatchEvalStuff));
次のように 2 番目のパラメーターを渡す必要があります。
text = reg.Replace(text, new MatchEvaluator(MatchEvalStuff, otherData));
これは可能ですか?これを行うための最良の方法は何ですか?
次のようなコードが少しあります。
text = reg.Replace(text, new MatchEvaluator(MatchEvalStuff));
次のように 2 番目のパラメーターを渡す必要があります。
text = reg.Replace(text, new MatchEvaluator(MatchEvalStuff, otherData));
これは可能ですか?これを行うための最良の方法は何ですか?
MatchEvaluator はデリゲートであるため、署名を変更することはできません。追加のパラメーターを使用してメソッドを呼び出すデリゲートを作成できます。これは、ラムダ式を使用すると非常に簡単です。
text = reg.Replace(text, match => MatchEvalStuff(match, otherData));
申し訳ありませんが、私は 2.0 を使用していると言うべきだったので、ラムダにアクセスできません。これが私がやったことです:
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 はこの例のためのものであり、実際に使用したコードではありません)。