Подтвердить что ты не робот

Контроллер исключений С# с фильтрацией

Я нашел question об фильтрации исключений на С#. И я думаю, чтобы написать для него некоторую эмуляцию. Я не знаю, как это помогает кому-то, и я не работал с фильтрацией VB. Конечно, он не оптимизирован, а готовность готова, но работает и делает то, что нужно делать (как я понял проблему). Итак, рабочий эскиз:

using System;


namespace ExceptionFiltering
{
    class ExceptionMonitor
    {
        Action m_action = null;

        public ExceptionMonitor(Action action)
        {
            this.m_action = action;
        }

        public void TryWhere(Func<Exception, bool> filter)
        {
            try
            {
                this.m_action();
            }
            catch (Exception ex)
            {
                if (filter(ex) == false)
                {
                    throw;
                }
            }
        }

        public static void TryWhere(Action action, Func<Exception, bool> filter)
        {
            try
            {
                action();
            }
            catch (Exception ex)
            {
                if (filter(ex) == false)
                {
                    throw;
                }
            }
        }
    }

    class Program
    {
        //Simple filter template1
        static Func<Exception, bool> m_defaultExceptionFilter = ex =>
        {
            if (ex.GetType() == typeof(System.Exception))
            {
                return true;
            }

            return false;
        };

        //Simple filter template2
        static Func<Exception, bool> m_notImplementedExceptionFilter = ex =>
        {
            if (ex.GetType() == typeof(System.NotImplementedException))
            {
                return true;
            }

            return false;
        };


        static void Main(string[] args)
        {
            //Create exception monitor
            ExceptionMonitor exMonitor = new ExceptionMonitor(() =>
            {
                //Body of try catch block
                throw new Exception();
            });

            //Call try catch body
            exMonitor.TryWhere(m_defaultExceptionFilter);


            //Call try catch body using static method
            ExceptionMonitor.TryWhere(() =>
            {
                //Body of try catch block
                throw new System.NotImplementedException();

            }, m_notImplementedExceptionFilter);


            //Can be syntax like ExceptionMonitor.Try(action).Where(filter)

            //Can be made with array of filters
        }
    }
}

Todo: глобальный обработчик исключений, поддержка нескольких фильтров и т.д.

Спасибо за любые советы, исправления и оптимизации!!!

4b9b3361

Ответ 1

Извините, я новичок в С#, поэтому не могу понять ваш код, но все же надеюсь, что мой совет поможет.

if (somecondition)
{
   return true;
}
else
{
   return false;
}

может быть просто:

return somecondition;

И вам нужно проверить null перед вызовом Action:

if (m_action!=null) m_action();