Можно ли вызвать "n" функции с тем же типом возврата, но с переменными параметрами, используя Func или Delegate в C # - PullRequest
1 голос
/ 01 апреля 2011

Вот мой сценарий.У меня есть класс с 10 методами, эти методы являются атомарными, и всего 10 строк кода макс.

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

Это так называемая упакованная функциябудет выполнять эти элементарные функции и обрабатывать их исключения, что позволит мне централизовать обработку исключений.

Возможно ли это в C # с использованием делегата или Func, или, может быть, существует другой способ централизованной обработки ошибок, который я мог упустить?

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 01 апреля 2011

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

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

Надеюсь, это поможет.

1 голос
/ 01 апреля 2011

Да можно вот пример кода

using System;

namespace ConsoleApp
{
    class Example {
        public void Run() {
            catchy(crashA); // Calling defined functions
            catchy(crashB);
            catchy(()=> {
                throw new ArgumentException("Anonymous function...");
            });
        }
        void crashA() {
            //...
            throw new ArgumentException("another error");
        }
        void crashB() {
            //...
            throw new ArgumentException("another error");
        }
        void catchy(Action action) {
            try {
                action();
            } catch (Exception ex) {
                Console.WriteLine(ex);
                // do something
            }
        }
    }

    class MainClass
    {

        public static void Main (string[] args)
        {
            new Example().Run();
            Console.ReadLine();
            Console.WriteLine ("Hello World!");
        }
    }
}
1 голос
/ 01 апреля 2011

Да, с таким делегатом

private delegate MyReturnType MyDelegate(params Object[] a);

, но он не будет безопасным для типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...