Замена C# Функцией обратного вызова как в AS3

Я так не думаю:

а)

0x00000000004005ef <+50>: mov rax,QWORD PTR [rbp-0x10] ; move the 8bytes starting at the address 
                                                       ; [rbp-0x10] to rax
0x00000000004005f3 <+54>: add rax,0x8                  ; rax = rax + 0x08 
0x00000000004005f7 <+58>: mov rax,QWORD PTR [rax]      ; move the 8bytes starting at the address 
                                                       ; [rax] to rax

б)

0x00000000004005ef <+50>: mov rax,QWORD PTR [rbp-0x8]  ; move the 8bytes starting at the address 
                                                       ; [rbp-0x8] to rax

«а)» выглядит так часть кода, которая загружает адрес, применяет (целочисленное) смещение и разыменовывает адрес. Однако, «b)» , начальный адрес отличается (хотя значение с этого другого адреса не читается, хотя).

6
задан Jeff Atwood 27 April 2009 в 20:23
поделиться

3 ответа

Чтобы сделать это в C#, использовать System.Text.RegularExpressions.Regex.Replace() который берет обратный вызов.

6
ответ дан 8 December 2019 в 05:24
поделиться
static void Main() {

    string s1 = Regex.Replace("abcdefghik", "e",
        match => "*I'm a callback*");

    string s2 = Regex.Replace("abcdefghik", "c", Callback);
}
static string Callback(Match match) {
    return "*and so am i*";
}

Обратите внимание, что у Вас есть доступ к согласованным данным через аргумент (и match.Value в частности, если Вы не хотите получить доступ к regex группам (.Groups) и т.д.).

12
ответ дан 8 December 2019 в 05:24
поделиться

Так же, как пример для создания существующих ответов абсолютно конкретными, и показывающий, как лямбда-выражения могут быть удобными:

using System;
using System.Text.RegularExpressions;

class Test
{
    static void Main()
    {
        var template = "On $today$ you need to do something.";
        var regex = new Regex(@"\$today\$");
        var text = regex.Replace(template,
            match => DateTime.Now.ToString("d"));
        Console.WriteLine(text);
    }
}

(Ответ Marc появился, в то время как я писал это, но я оставлю на виду его как полный пример, если любой не будет думать, что это просто избыточно. Я рад удалить его, если предложено.)

5
ответ дан 8 December 2019 в 05:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: