[C#] Делегаты. Передача метода как параметра

Тема в разделе ".NET", создана пользователем Orbit@L, 17 июл 2012.

Статус темы:
Закрыта.
  1. Orbit@L

    Orbit@L Писатель

    Регистр.:
    19 июн 2012
    Сообщения:
    7
    Симпатии:
    2
    Как видите код повторяется и изменяется только правило регулярного выражения и вызов метода. Как упростить и оптимизировать этот код, например поместить в метод и передавать правило регулярного выражения и делегаты методов func.
    Код:
    if (Regex.IsMatch(txtboxlink.Text, @"(http://)?(site)\.com/news/\d+/.*?"))
                    try
                    {
                        func1();
                    }
                    catch (WebException)
                    {
                        error("Невозможно получить данные с сервера");
                    }
                    catch (NullReferenceException)
                    {
                        error("Страница не распознана");
                    }
                else if (Regex.IsMatch(txtboxlink.Text, @"(http://)?(test)\.org/forum/topic\.php\?p\=\d+"))
                    try
                    {
                        func2();
                    }
                    catch (WebException)
                    {
                        error("Невозможно получить данные с сервера");
                    }
                    catch (NullReferenceException)
                    {
                        error("Страница не распознана");
                    }
                else
                    error("Неправильная ссылка на страницу");
     
  2. psn

    psn

    Регистр.:
    30 апр 2009
    Сообщения:
    227
    Симпатии:
    30
    тут не нужны делегаты, не надо писать отдельно обработчик ошибок для каждого условия и все
    Код:
                        try
                        {
                            if (Regex.IsMatch(txtboxlink.Text, @"(http://)?(site)\.com/news/\d+/.*?"))
                                func1();
                            else if (Regex.IsMatch(txtboxlink.Text, @"(http://)?(test)\.org/forum/topic\.php\?p\=\d+"))
                                func2();
                            else
                                error("Неправильная ссылка на страницу");
                        }
                        catch (WebException)
                        {
                            error("Невозможно получить данные с сервера");
                        }
                        catch (NullReferenceException)
                        {
                            error("Страница не распознана");
                        }
                        catch (Exception exception)
                        {
                            error(exception.Message + exception.StackTrace);
                        }
    
    Func и Action используются в основном для работы с gui и в Linq
     
    Umid, AdreKh и Orbit@L нравится это.
Статус темы:
Закрыта.