28

次のようなコードが少しあります。

text = reg.Replace(text, new MatchEvaluator(MatchEvalStuff));

次のように 2 番目のパラメーターを渡す必要があります。

text = reg.Replace(text, new MatchEvaluator(MatchEvalStuff, otherData));

これは可能ですか?これを行うための最良の方法は何ですか?

4

2 に答える 2

31

MatchEvaluator はデリゲートであるため、署名を変更することはできません。追加のパラメーターを使用してメソッドを呼び出すデリゲートを作成できます。これは、ラムダ式を使用すると非常に簡単です。

text = reg.Replace(text, match => MatchEvalStuff(match, otherData));
于 2008-11-20T19:34:02.913 に答える
14

申し訳ありませんが、私は 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 はこの例のためのものであり、実際に使用したコードではありません)。

于 2008-11-20T19:56:12.777 に答える