Array.Sort (Array, IComparer) не воспринимает исключение от IComparer'а?

Рейтинг: 1Ответов: 1Опубликовано: 09.02.2015

Всем привет. Имею следующий код:

namespace testapp
{
    internal static class Program
    {
        private static void Main()
        {
            int[] intarray = {1, 3, 7, 10, 11, 99, 30, 5};
            ExceptionTest exceptionTest =new ExceptionTest();
            try
            {
                Array.Sort(intarray, exceptionTest);
            }
            catch (Exception e)
            {

                Console.WriteLine("caught Exception from ExceptionTest class !");
                Console.WriteLine(e.Message);
                Console.ReadLine();
            }

        }
    }

    class ExceptionTest : IComparer
    {

        public int Compare(object x, object y)
        {
            throw new Exception("test exception");
        }
    }

}

Ожидаю, что на консоль выведется "caught Exception from ExceptionTest class !" и текст исключения. Однако вместо этого появляется сообщение "Exception не обработан пользовательским кодом". То есть исключение, генерируемое методом Compare, не доходит до вызывающего метода. Подскажите, пожалуйста, в чем может быть проблема. Спасибо.

Ответы

▲ 4Принят

На самом деле все работает как надо. Вот пример В блоке catch мы получаем InvalidOperationException, InnerException которого - то самое исключение, которое вы бросаете в методе Compare.

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