私はToken Replacement and Identificationからの解決策を見ています:
string result = Regex.Replace(
text,
@"\[%RC:(\d+)%\]",
match => dict[int.Parse(match.Groups[1].Value)]);
そして、 がどのように過負荷になったのか理解できませんMatchEvaluator
。
ラムダ式の一部を理解しています。入力match
を受け取り、辞書から整数を検索しますか?
しかし、の値はmatch
どこから来るのでしょうか? そして、返された値はどこにmatch => dict[int.Parse(match.Groups[1].Value)]);
行くのですか?
編集:あなたの何人かは言及しDelegate
ました。驚いたことに、CS の大学で 3 年間過ごした後、私はこの用語に出くわしませんでした。この特定の状況で は何をDelegate
し、何をしますか?
最後の編集:次のコードで独自のデリゲートを作成しようとしました。私のトークンは次の形式です[@someTokenName]
public void CreateScript(Dictionary<string,string> dictionary, string path)
{
//used in the regex to identify the string to replace
var pattern = @"\[@[0-9a-fA-F]+\]";
//read in the file found at the path
var lines = File.ReadAllLines(path);
int lineCounter = 0;
foreach (string line in lines)
{
line = Regex.Replace(line, pattern, match => dictionary.TryGetValue((match.Groups[0].Value)));
}
しかし、デリゲート型ではないため、「ラムダ式を型 'int' に変換できません」というメッセージが表示され続けます。私が書いた行とソリューションで見つかった行の違いは何ですか?