Я смотрю на решение Замена и идентификация токена:
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)]);
go?
Изменить: некоторые из вас упоминали Delegate
. Удивительно после трех лет в университете для CS, я не сталкивался с этим термином. Что такое 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 ", потому что это не тип делегата. Какая разница между строкой, которую я написал, и той, что найдена в решении?